What we think about IPLD, libp2p, IPFS, Filecoin and the “PL (Protocol Labs) stack”

By Agora Citizen Network (@agoracitizen.network)
Published:

IPFS is a peer-to-peer network written using libp2p libraries. Its goal is to make anyone able to make any file available to the network via “content addressing” (“I want this hash => I get it from anywhere that’s the closest, it doesn’t matter from where”). IPFS can be seen as a developer-friendly generalised BitTorrent.

Content addressing is based on verifiable data, implemented via a technology called “Content IDentifier” (CID).

Technically, a CID is nothing but a glorified hash, with the exception that the selected hash algorithm is prepended before the payload hash itself.

By prepending the hash that’s used, CIDs are self-describing, and that is why IPFS can allow users to request data directly by their CID rather than by their location. After downloading data, the client would re-calculate the CID and verify if it effectively hashes to the same CID as the one the client initially requested. This way, there is no need to have prior trust in any peer of the network, and a permissionless network is possible.

Each file “added” or “pinned” to the IPFS network is in fact subdivided into chunks, each represented by their CID, using the IPLD technology, which is a set of algorithms that divide any input file into an IPLD DAG. An IPLD DAG is a Merkle DAG, with the exception that hashes are replaced by CIDs.

Fetching a file in IPFS is fetching each CID of the file’s IPLD DAG.

On the IPFS network, data is not persistent. Filecoin brings this persistence by allowing clients to pay storage providers in exchange for cryptographic proofs of storage of data, addressed by CIDs.

Filecoin recently brought Compute to its blockchain (smart contracts called “actors” through the Filecoin Virtual Machine), allowing various use-cases such as Data DAO: a DAO that’s responsible for the governance & stewardship of any data that verifies certain cryptographic conditions.

Advantages

Limitations

Could it be useful for our requirements?