InterPlanetary File System
|
|
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
(Learn how and when to remove this template message)
|
| Developer(s) | Protocol Labs |
|---|---|
| Stable release |
0.4.8 / 30 March 2017
|
| Repository | github |
| Development status | Active |
| Written in | Protocol implementations: Go (reference implementation), JavaScript, Python Client libraries: Go, Java, JavaScript, Python, Scala, Haskell, Swift, CommonLisp, Rust, Ruby, Swift, PHP, C# |
| Operating system | FreeBSD, Linux, macOS, Windows |
| Available in | Go, JavaScript, Python |
| Type | Protocol, distributed file system, content delivery network |
| License | MIT license |
| Website | ipfs |
InterPlanetary File System (IPFS) is a protocol designed to create a permanent and decentralized method of storing and sharing files.[1] It 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 since 2014 by Protocol Labs with help from the open source community.[2] It was initially designed by Juan Benet.[3]
History[edit]
In 2014, the IPFS protocol took advantage of the Bitcoin blockchain protocol and network infrastructure in order to store unalterable data, remove duplicated files across the network, and obtain address information for accessing storage nodes to search for files in the network.[4][1]
Implementations in Go[5] and JavaScript[6] exist, and a Python implementation is in progress.[7] The Go implementation is considered to be the "reference implementation"[8] while formal specifications are developed.[9]
Description[edit]
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 repository. In other words, IPFS provides a high-throughput, content-addressed block storage model, with content-addressed hyperlinks.[10] This forms a generalized Merkle directed acyclic graph (DAG). 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.[11] Distributed Content Delivery saves bandwidth and prevents DDoS attacks which HTTP struggles with.[4]
The filesystem can be accessed in a variety of ways, including via FUSE and over HTTP.[10] 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, serves to build trust chains, is compatible with other NSes and can map DNS, .onion, .bit, etc. to IPNS.[12]
Merkle data format[edit]
Every Merkle is a directed acyclic graph (DAG) because each node is accessed via its name. Each branch of Merkle is the hash of its local contents, naming children by their hash instead of their full contents. So after creation there is no way to edit a node. This prevents cycles (assuming there are no hash collisions) since one can not link the first created node to the last node to create the last reference.
In general for any Merkle, 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[edit]
- ZeroNet
- Cooperative storage cloud
- Distributed data store
- Distributed hash table
- Self-certifying File System
- Coral Content Distribution Network
- Kademlia
- Akasha Project [1]
- OpenBazaar
References[edit]
- ^ a b Finley, Kurt (June 20, 2016). "The Inventors of the Internet Are Trying to Build a Truly Permanent Web". Wired.
- ^ "The IPFS Project". Retrieved 11 September 2015.
- ^ "IPFS README - Who designed it?". Retrieved 11 September 2015.
- ^ a b https://cointelegraph.com/news/ipfs-protocol-selects-ethereum-over-bitcoin-prefers-ethereum-dev-community
- ^ "ipfs/go-ipfs". GitHub. Retrieved 2017-02-13.
- ^ "ipfs/js-ipfs". GitHub. Retrieved 2017-02-13.
- ^ "ipfs/py-ipfs". GitHub. Retrieved 2017-02-13.
- ^ "IPFS Docs". ipfs.io. Retrieved 2017-02-13.
- ^ "ipfs/specs". GitHub. Retrieved 2017-02-13.
- ^ a b http://www.ibtimes.co.uk/juan-benet-ipfs-talks-about-filecoin-1586122, International Business Times, accessed 26 December 2016
- ^ "The IPFS Project - How it works". Retrieved 11 September 2015.
- ^ "IPFS README". Retrieved 11 September 2015.