aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2017-10-30 09:15:31 -0700
committerBryan Newbold <bnewbold@robocracy.org>2017-10-30 09:15:31 -0700
commit931acf71c82dd780234ef5d2e6eccb20a5b2880e (patch)
treef7059c57593a99ed470d9229ad54e75944ae5c7a
parentde335ba9b7482974aaf73696644abeb47a053ada (diff)
downloadgeniza-931acf71c82dd780234ef5d2e6eccb20a5b2880e.tar.gz
geniza-931acf71c82dd780234ef5d2e6eccb20a5b2880e.zip
update README
-rw-r--r--README.md65
1 files 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