From 931acf71c82dd780234ef5d2e6eccb20a5b2880e Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Mon, 30 Oct 2017 09:15:31 -0700 Subject: update README --- README.md | 65 ++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 37a50fa..0a47b72 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ it will eat-your-data. [![Build Status](https://travis-ci.org/bnewbold/geniza.svg?branch=master)](https://travis-ci.org/bnewbold/geniza) -- [ ] SLEEP v2 Files +- [ ] SLEEP v2 files and registers - [x] read/write file headers - [x] read/write file chunks as raw bytes - [ ] pread/pwrite file chunks without seeking @@ -24,39 +24,60 @@ it will eat-your-data. - [ ] verify entire register (signatures and merkel tree) - [ ] bitfields - [ ] Drive metadata and files - - [ ] add file to register - - [ ] checkout file from register - - [ ] print file tree ("ls") - - [ ] add directory recursively - - [ ] checkout directory recursively + - [x] read full history ("log") + - [ ] read file tree ("ls") + - [ ] import file to register + - [ ] export file from register + - [ ] import/export directories recursively - [ ] Networking - [x] send/receive encrypted messages to a known host - - [ ] pull register from a known host - - [ ] sync register to a known host + - [ ] receive entire register from a known host + - [ ] share (upload) register to a known host + - [ ] bitfields - [ ] lookup hosts in DHT swarm by discovery key -- [ ] Wrapper command +- [ ] Wrapper commands - [ ] clone - [ ] share - - [ ] log + - [x] log - [ ] status - [ ] add -### Dependencies +### Differences from dat -While (temporarily?) using Cargo's `[patch]` feature to patch sodiumoxide, -builds require Rust 1.21 (stable circa Oct 2017). +A few simplifications were made compared to the regular dat client: + +- Content data is always stored in the SLEEP directory (`content.data`), + instead of just having the latest data in files in the working directory. + This results in data duplication. +- Sparse registers aren't implemented: full history needs to be present for + both metadata and content. +- Tracking of remote node state (bitfields) is minimized as much as possible. +- Almost everything is synchronous and single-threaded, so only a single remote + node connection at a time is allowed. -Requires libsodium-dev system-wide (for now). +### Dependencies Notable Rust Libraries: -- rust-crypto for blake2b -- sodiumoxide Ed25519 (signing) and XSalsa20 (stream) -- integer-encoding for simple varints (network protocol) -- rust-protobuf for protobuf (network protocol) +- `rust-crypto` for hashing (BLAKE2b) +- `sodiumoxide` signing (Ed25519) and network stream encryption (XSalsa20) +- `integer-encoding` for simple "varints" +- `rust-protobuf` for protobuf messages - ??? for Kademlia Mainline DHT -protobuf code generated with `rust-protobuf`; the `protoc` tool (`sudo apt -install protobuf-compiler`) and rust plugin `protoc-gen-rust` (`cargo install -protobuf`) are only needed when changing .proto files, eg: +While (temporarily?) using Cargo's `[patch]` feature to patch sodiumoxide, +builds require Rust 1.21 (stable circa Oct 2017). + +Requires the libsodium library installed system-wide to run, and header files +(`libsodium-dev`) for now, due to dynamic linking and the simple build +configuration. It should be possible to statically link a free-standing +executable, and to auto-build the libsodium C library during compilation if it +isn't found system-wide. + +protobuf encode/decode methods are auto-generated ahead of time using +`rust-protobuf`, so if you're just compiling or installing `geniza` you don't +need any special tools. However, if you change or extend the `.proto` schema +files, you do, along with the `protoc` tool (`sudo apt install +protobuf-compiler`) and rust plugin `protoc-gen-rust` (`cargo install +protobuf`). The command to regenerate a single file is: - protoc --rust_out . network_proto.proto + protoc --rust_out . network_msgs.proto -- cgit v1.2.3