From 885194df38510def163d5a64d8353067c2e4317d Mon Sep 17 00:00:00 2001 From: Joonas Koivunen Date: Mon, 3 Feb 2020 17:52:37 +0200 Subject: [PATCH] add the survey as was commented Comment: https://github.com/ipfs/devgrants/pull/13#discussion_r373643238 --- open-grants/ipfs-rust/README.md | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/open-grants/ipfs-rust/README.md b/open-grants/ipfs-rust/README.md index b893067a..2f19380b 100644 --- a/open-grants/ipfs-rust/README.md +++ b/open-grants/ipfs-rust/README.md @@ -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,