Hello all.
Iām working on a āsimpleā IPFS implementation (from scratch) for the Elixir language. My goal for now is to be able to get a file from IPFS. I made good progress already and Iām able to get back a list of providers for a particular CID.
The last step for me is to download the file from this list of peers. But how to achieve this is not clear. My current understanding is that I need to get back all the blocks of the file (to have something similar to the ipfs ls
command) and then use the bitswap protocol to get these blocks.
When I connect to one of the bootstrap node, I can see that it exposes some protocols through mplex:
/floodsub/1.0.0
/ipfs/bitswap/1.1.0
/ipfs/id/1.0.0
/ipfs/kad/1.0.0
/libp2p/circuit/relay/0.1.0
I used the kad protocol to discover peers that can provide a file, I think that I need bitswap to get back the blocks I want, but how do I get back the blocks of a file ? I think I understand the merkle dag thing, but I canāt find how to ask a node the merkle dag of a CID.
To get here I spent a lot of time in the go code but there is so much abstractions everywhere !! A little help would be great