InterPlanetary File System

InterPlanetary File System (IPFS) is a content-addressable, peer-to-peer hypermedia distribution protocol. Nodes in the IPFS network form a distributed file system. IPFS is an open source project developed by Protocol Labs with help from the open source community. It was initially designed by Juan Benet - wikipedia

# Description

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 World Wide Web, but IPFS could be seen as a single BitTorrent swarm, exchanging objects within one Git (Git (software)) repository. In other words, IPFS provides a high-throughput, content-addressed block storage model, with content-addressed hyperlinks. This forms a generalized Merkle (Merkle tree) DAG (directed acyclic graph). IPFS combines a distributed hash table, 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.The IPFS Project - How it works Distributed Content Delivery saves bandwidth and prevent DDoS attacks which HTTP struggles with - wikipedia

The filesystem can be accessed in a variety of ways, including via FUSE (Filesystem in Userspace) and over HTTP. A local file can be added to the IPFS filesystem, making it available to the world. Files are identified by their hashes, so it's caching-friendly. They are distributed using a BitTorrent-based protocol. Other users viewing the content aid in serving the content to others on the network. IPFS has a name service called IPNS, a global namespace based on PKI (Public Key Infrastructure), serves to build trust chains, is compatible with other NSes and can map DNS (Domain Name System), .onion, .bit, etc. to IPNS.IPFS README

# Merkle Data Formats

Every Merkle (Merkle Tree) is a DAG (Directed Acyclic Graph) because each node is named by a hash algorithm (a One-way function) which prevents cycles - wikipedia

Each branch of Merkle (Merkle tree) is the hash of its local contents, naming childs by their hash instead of their full contents.

In general for any Merkle (Merkle tree), to create a new branch or verify an existing branch, a hash algorithm is used on some combination of the local contents, such as a list of child hashes and other bytes. A few different hash algorithms are available in IPFS.

The data input to any of those hash algorithms is described somewhere around https://github.com/ipfs/go-ipfs/tree/master/merkledag

# See also