-
Notifications
You must be signed in to change notification settings - Fork 90
Open
Description
Since #1 is clogged with all the many comments I open a new issue here. Feel free to continue the discussion below and I'll keep the following updated as things develop. Also feel free to create separate issues / repos to coordinate and I'll add the relevant links below.
Next steps (networking, stalled – please see the “storage” section below):
- We could use some documentation for the
py-libp2plibrary- See issue Adding documentation for what is currently completed libp2p/py-libp2p#35 for status
- Current work: Add documentation libp2p/py-libp2p#330
- Documentation for the Bitswap protocol would be very useful as well – and not just for py-ipfs
- See issue Create better documentation for bitswap + webpage for it ipfs/js-ipfs-bitswap#21 for status
- Currently available information:
- Finally, some documentation on the currently used DHT would be nice
- See https://github.com/ipfs/camp/blob/master/DEEP_DIVES/02-scaling-up-the-dht.md for some relevant links and current developments
- Implement the Bitswap protocol in Python 3
- Current
py-ipfs-bitswaplibrary: https://github.com/AliabbasMerchant/py-ipfs-bitswap - Current status/discussion: General Discussion AliabbasMerchant/py-bitswap#1
- → Having this would allow us to implement the
ipfs block *API for fetching blocks of nodes we are connected to – fetching blocks of non-connected nodes needs the DHT. - To interact with go-IPFS you can start it with
ipfs daemon --disable-transport-encryption, but note that you will not be able to connect to any regular peers until one of the transport encryption methods is implemented
- Current
- (Low priority) Improve the
multistream-selectcode ofpy-libp2pto support actually dialing other nodes (MOSTLY FIXED UPSTREAM –lsis still missing and anmss-ncimplementation could still be useful)- Write a
mss-nclike utility on top of this code to demonstrate that you are able to connect togo-ipfsnodes and negotiate - Here's some very simple sample code demonstrating the main mode of MSS:
import socket s = socket.socket(socket.AF_INET) s.connect(("127.0.0.1", 4001)) # The connect will already exist s.sendall(b'\x13/multistream/1.0.0\n') # Send your supported version of MSS s.recv(1024) # → b'\x13/multistream/1.0.0\n' – Receive supported version of MSS by other party & validate! s.sendall(b"\x0d/secio/1.0.0\n") # Request the protocol you'd like to upgrade too s.recv(1024) # → b'\0x0d/secio/1.0.0\n…' – Confirmation that protocol is available + Protocol data OR # → b'\0x03na\n' – Protocol was Not Available
- The binary values at the start are varints and you need to read them byte-by-byte until you're done decoding them, then read the remainder of each message lines based on the received length value
To do this you'll need to create an async stream based version of https://github.com/fmoo/python-varint/blob/master/varint.py - Additionally there is also a special
lsmode in which MSS will return a list of supported protocols, see https://github.com/multiformats/multistream-select/blob/master/README.md for the complete spec - Subtask: Figure out how to actually dial a node using py-libp2p and document this using an example program.
- Write a
- Implement SecIO libp2p transport security (easier than TLS, but will be phased out eventually)
- You'll need to coordinate with the py-libp2p guys on transport security modules are added exactly
- Some background with crypto is highly recommended!
- Implement DHT peer lookups in
libp2p- Currently available documentation: https://github.com/libp2p/specs/tree/8b89dc2521b48bf6edab7c93e8129156a7f5f02c/kad-dht
- Go Implementation: https://github.com/libp2p/go-libp2p-kad-dht
- JavaScript Implementation: https://github.com/libp2p/js-libp2p-kad-dht
- For the current status see: Kademlia Implementation Roadmap libp2p/py-libp2p#150 (also see the referenced PRs on that issue)
- Interesting PRs: #129, #153, #157
- Contacts: @alexh @zaibon @zixuanzh
- (Stretch goal) Factor out https://github.com/zixuanzh/py-libp2p/tree/master/protocol_muxer into a separate
py-multistream-selectlibrary and updatepy-libp2pto use it (Easy!, stalled – needs your help!)- Current
py-multistream-selectlibrary: https://github.com/dheatovwil/py-multistream-select - Current status: Refactor to use multistream_select libp2p/py-libp2p#101
- Current
- (Stretch goal) Implement TLSv1.3 libp2p transport security
- You'll need to coordinate with the py-libp2p guys on transport security modules are added exactly
- Some background with crypto/X.509/TLS is highly recommended!
Next steps (storage, simpler):
- Port https://github.com/ipfs/py-datastore to Python 3
(Suggestion: Use Python'slib2to3and just drop Python 2 entirely.)Current port: https://github.com/dheatovwil/datastore
- Convert datastore to use async/await using some library
(maybe https://pypi.org/project/aiofiles/ ?) for file accessThetrioframework is used for async I/O now - Implement a https://github.com/ipfs/go-ds-flatfs compatible backend for the above library
- Write a minimal
py-ipfs“implementation” that can fetch blocks from the local$IPFS_PATHdirectory and expose them with an API similar to what https://github.com/ipfs/py-ipfs-http-client currently offers (goal here is to eventually have a drop-in replacement)- In progress by @Alexander255 (no public code yet, most work happens in py-datastore)
- Implement a simple Python HTTP server that emulates the
block/{get,put,rm,stat}API that serves blocks from the local$IPFS_PATHdirectory- Recommendation: Use the
trio-quartASGI web microframework for this. (Whatever you choose it will have to be compatible with trio as that is the AIO framework used in the stack.)
- Recommendation: Use the
- (Stretch goal) Implement a badgerds compatible backend for py-datastore
- There is an issue requesting Python bindings for the Go library, but no work has been done yet:
dgraph-io/badger#984
- There is an issue requesting Python bindings for the Go library, but no work has been done yet:
- Beyond: Start integrating IPLD to expose the UnixFS files stored in those raw blocks…
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels