This crate provides a low-level streaming API to hypercore-protocol and exposes an interface that should make it easy to implement actual protocol logic on top. This crate targets Hypercore 9 (Dat 2) only.
It uses async-std for async IO, and snow for the Noise handshake.
Current features are:
- Complete the Noise handshake and set up the transport encryption
- Open channels with a key
- Accept channels opened by the remote end if your end knows the key
- Create and verify capability hashes
- Send and receive all protocol messages
- Register and use protocol extensions
We're actively looking for contributors to the datrust development! If you're interested, say hi in the #rust
channel on the Hypercore Protocol Discord :-)
Examples
These examples sync data between Rust and NodeJS hypercore-protocol implementations. To prepare, run
cd examples-nodejs
npm install
hypercore.rs
node examples-nodejs/run.js hypercore
Runs the hypercore.rs
example with a replication stream from NodeJS hypercore. The hypercore.rs
example fetches all blocks of a Node.js hypercore and inserts them into a Rust in-memory hypercore.
basic.rs
Accepts a hypercore-protocol stream and fetches all blocks of the first hypercore.
node examples-nodejs/run.js basic
Runs the basic.rs
example with a replication stream from NodeJS hypercore. The basic.rs
example fetches all blocks of a hypercore and prints them to STDOUT.
-
Share a file over a hypercore on a local TCP server. Prints a hypercore key.
node examples-nodejs/replicate.js server 8000 ./README.md
-
Use this key to connect from Rust and pipe the file content to stdout:
cargo run --example basic -- server 8000 KEY
Contributing
We're actively looking for contributors to the datrust development!
If you're interested, the easiest is to say hi in the #rust
channel on the Hypercore Protocol Discord.
Contributions include pull requests, issue reports, documentation, design and other work that benefits this project.
This project is welcoming contributions from anyone who acts in good faith! We do not tolerate toxic behavior or discriminations against other contributors. People who engage with this project in bad faith or fail to reflect and change harmful behavior may be excluded from contributing. Should you feel that someone acted in such a way, please reach out to the authors of this project.
Open, diverse, and inclusive communities live and die on the basis of trust. Contributors can disagree with one another so long as they trust that those disagreements are in good faith and everyone is working towards a common goal.