Skip to content

Commit

Permalink
add the survey as was commented
Browse files Browse the repository at this point in the history
Comment: #13 (comment)
  • Loading branch information
koivunej committed Feb 3, 2020
1 parent 02e176d commit 885194d
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions open-grants/ipfs-rust/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,55 @@ and here is what we found to be some of the top projects on this list.
* https://github.com/vmx/rust-ipld/
* Protocol Labs internal work on rust-ipld.

#### rust-libp2p

* secio: fast moving, even this week `ed25519` compatbile PeerId inlining was merged
* protocol selection with yamux or mplex multiplexing
* dht: cannot comment at this time on completeness or interoperability
* floodsub should now be compatible, gossipub was merged in the last weeks
* ongoing work on QUIC support, probably out of scope for now but something to keep an eye on
* swarm management, id, ping and support for building bitswap, as demonstrated by @dvc94ch's work on [rust-ipfs](https://github.com/ipfs-rust/rust-ipfs/)
* [implementation differences in aes-ctr](https://github.com/libp2p/rust-libp2p/issues/1242) ([PR pending](https://github.com/RustCrypto/stream-ciphers/pull/75))

Action item: learn more about status of DHT implementation in rust-libp2p.

#### IPFS DAG / IPLD

* [rust-ipfs] includes Merkledag (dag-pb) and dag-cbor over an unifying abstraction on top of [rust-protobuf] and [custom version of `cbor`](https://github.com/dvc94ch/rust-cbor) crate
* [rust-ipld] includes dag-cbor on top of custom encoder and decoder, even multiblock types in a separate project [rust-ipld-collections]
* protobuf encoding and decoding are mature and there exists at least three solutions for the project needs with different trade-offs ([rust-protobuf], [quick-protobuf], [prost!])
* [cbor encoding and decoding for serde](https://github.com/pyfisch/cbor) has existed for a while, but the main crate only [recently added support for tagged values](https://github.com/pyfisch/cbor/pull/172), something which has been missing a while at least from the larger `serde` community, which the is the core crate for dealing with json alike formats
* supporting tags has been discussed for a while but problematic as they appear in formats which are essentially a superset of JSON, like CBOR
* there is ongoing work at [vmx/rust-ipld] on top of recently enabled [serde_cbor](https://github.com/pyfisch/cbor) tag support
* JSON format support can be considered mature with [serde_json]
* supporting IPLD dag-json documents will need work

What is definitely missing is support for IPLD selectors on one account of their [spec](https://github.com/ipld/specs/blob/master/selectors/selectors.md) is still in draft status. The functionality required by `ipfs dag get` has been at least partially implemented already in [rust-ipfs]. The existing attempts are expected to evolve and will be considered to be used and extended, which ever looks most promising at the start of the project. Our understanding is that @vmx intends to implement the more advanced features of IPLD in the near future.

[rust-ipfs]: https://github.com/ipfs-rust/rust-ipfs/
[rust-protobuf]: https://github.com/stepancheg/rust-protobuf
[rust-ipld]: https://github.com/ipfs-rust/rust-ipld
[rust-ipld-collections]: https://github.com/ipfs-rust/rust-ipld-collections/
[quick-protobuf]: https://github.com/tafia/quick-protobuf
[prost!]: https://github.com/danburkert/prost
[vmx/rust-ipld]: https://github.com/vmx/rust-ipld
[serde_json]: https://github.com/serde-rs/json

#### IPFS Blockstore

* Multiple existing key-value store solutions randing from wrappers of databases written in different languages to fully rust solutions
* Initial filesystem and rocksdb based stores in [rust-ipfs] by @dvc94ch

[rust-ipfs]: https://github.com/ipfs-rust/rust-ipfs/

#### Bitswap

* The only found implementation is in rust-ipfs by, again, @dvc94ch, which has been tested to exchange block with go-ipfs 0.4.22 and an older rust-libp2p

#### HTTP

The "async story" of Rust enabling for example high performance web services is still evolving at great speed but there exists some longer running projects enabling the building of HTTP API as is required to enable testing such as [warp](https://github.com/seanmonstar/warp).

### Maintenance and Upgrade Plan

We want to make a codebase that will last into the future. Equilibrium Labs and MRH.io,
Expand Down

0 comments on commit 885194d

Please sign in to comment.