IPFS

From the paper:

The InterPlanetary File System (IPFS) is a peer-to-peer distributed file system that seeks to connect all computing devices with the same system of files. In some ways, IPFS is similar to the Web, but IPFS could be seen as a single BitTorrent swarm, exchanging objects within one Git repository. In other words, IPFS provides a high throughput content-addressed block storage model, with content- addressed hyper links. This forms a generalized Merkle DAG, a data structure upon which one can build versioned file systems, blockchains, and even a Permanent Web. IPFS combines a distributed hashtable, an incentivized block exchange, and a self-certifying namespace. IPFS has no single point of failure, and nodes do not need to trust each other.

IPFS is an ambitious vision of new decentralized Internet infrastructure, upon which many different kinds of applications can be built.

IPFS could be the most important thing that is happening to the Internet technologies currently. It promises to provide at least as much potential as the whole emerging blockchain 2.0 space. Moreover, IPFS is a protocol that can connect different blockchain and content directly, therefore it can play nicely along Ethereum and make it much more powerful see Interview with J. Benet.

  1. IPFS by Juan Batiz-Benet (Ethereum DevCon1). This presentation is a very good overview of IPFS, but it also uses some technical terms without knowing which it may be difficult to follow. In that case it may be a good idea to:

  2. Official site http://ipfs.io with pretty much everything you need to know...

  3. Introduction to IPFS (InterPlanetary File System); a brief post about a protocol that changes everything

  4. IPFS Introduction by Example

  5. Interview with Juan Benet of IPFS at DEVCON1 in London. IPFS is trying to be a protocol which can connect pretty much everything on the internet - so it is like http, rather than tcp/ip. This includes linking between blockchains, filesystem objects, etc. One of the use case with Ethereum could be putting large objects (including program code, etc.) on IPFS, while including only link into blockchain for efficiency. This may lead not only to more efficient ETH blockchain, but also to EVM state tree which is partially outside blockchain... Pretty much mind blowing.

    • He also mentioned a project called BitHub, which had a system to enable github repos to automatically pay bitcoins for merged repos.
  6. IPFS paper (DRAFT 3) which is also main specification. Draft 4 is currently in production. A few remarks from the paper:

    *  The central IPFS principle is modelling *all data* as part of the *same* Merkle DAG (distributed acyclic graph);
    *  It uses multihash format for producing hashes, which is a kind of meta-protocol, allowing users to use any known hashing algorithm they want (something similar to Ceptr protocol meta-data);
    *  IPFS implement a kind of offer network with reputation - nodes form a kind of barter network for segments of files and can refuse to serve a node which does not give them anything back (i.e. does not have what they need).
    *  Above is implemented by BitSwap protocol - the only original contribution of IPFS (apart from combining a lot of stuff) - every node keeps a ledger, which records how many bytes it asked and how many served for other nodes, effectively establishing a reputation;
    *  Potential data structures:
    

    (a) key-value stores (b) traditional relational databases (c) Linked Data triple stores (d) linked document publishing systems (e) linked communications platforms (f) cryptocurrency blockchains. These can all be modelled on top of the IPFS Merkle DAG, which allows any of these systems to use IPFS as a transport protocol for more complex applications.

    *  Data on IPFS can be encrypted:
    

    IPFS automatically verifies signatures, and can decrypt data with user-specified keychains. Links of encrypted objects are protected as well, making traversal impossible without a decryption key;

    * There is also an IPNS (Interplanetary name system) which allows to have mutable objects (meaning that they can be changed after being published on IPFS). It seems that using IPNS also allows to delete objects from the network by the owner (needs checking).
    * It seems that due to the market based exchange of data, data can be forgiven by the network, if nobody asks for it and nodes decide to stop serving this particular data (also needs checking).