📖
[Deprecated] Launchpad Curriculum
  • README
  • About Launchpad
  • Launchpad Learning Resources
    • The Protocol Labs Network
      • What is the PL Network?
      • Teams in the PL Network
      • Protocol Labs Culture
      • Where We are Headed
      • Open Source Stewardship
      • Open Source Contribution
    • IPFS
      • IPFS Setup (Tutorial)
      • Mutable Content
      • IPFS Public DHT
      • Who Uses IPFS
      • How IPFS Works
      • Data Transfer
      • IPFS Subsystems & Architecture
      • The IPFS Gateways
      • The IPFS API (Tutorial)
      • IPFS Resources
    • IPLD
      • Content Addressing & CIDs
      • Graphs: Merkle DAGs
      • The IPLD Data Model
      • IPLD & IPFS
      • Codecs
      • IPLD Schemas
      • Paths & Selectors
      • Distributed Data Structures
      • The CAR Format
      • IPLD Resources
    • libp2p
      • Core Concepts
      • libp2p Connections and Users
      • Decentralized Messaging
      • Gossipsub
      • Distributed Networking Solutions
      • Nat Traversal and Hole Punching
      • libp2p Resources
    • Filecoin
      • How Filecoin Works
      • Filecoin Cryptoeconomics
      • The Filecoin Protocol
      • Drand
      • Progress & Future Work
      • Filecoin Resources
  • Other Resources
    • Pre-Requisites
      • Web3 & Protocol Labs
      • Building Web3
      • Web3 Tools
    • Protocol Labs Toolkits & SDKs
      • Textile
      • Ceramic
      • Fleek
      • Web3.Storage
      • Piñata
    • Built On IPFS and Filecoin
    • Additional Learning
Powered by GitBook
On this page
  • Subsystems
  • Architecture
  • IPFS and the Merkle DAG
  • Nodes and Network Model
  • IPFS Cluster
Edit on GitHub
  1. Launchpad Learning Resources
  2. IPFS

IPFS Subsystems & Architecture

A Technical Guide

PreviousData TransferNextThe IPFS Gateways

Last updated 2 years ago

Subsystems

This is an

Map of go-ipfs Subsystems WIP: This is a high-level architecture diagram of the various sub-systems of go-ipfs. To be updated with how they interact.

ipfs subsystem 1

Architecture

This spec document defines the IPFS protocol stack, the subsystems, the interfaces, and how it all fits together. It delegates non-interface details to other specs as much as possible. This is meant as a top-level view of the protocol and how the system fits together.

Note, this document is not meant to be an introduction of the concepts in IPFS and is not recommended as a first pass to understanding how IPFS works. For that, please refer to the IPFS paper.

IPFS and the Merkle DAG

At the heart of IPFS is the MerkleDAG, a directed acyclic graph whose links are hashes. This gives all objects in IPFS useful properties:

  • Authenticated: content can be hashed and verified against the link

  • Permanent: once fetched, objects can be cached forever

  • Universal: any datastructure can be represented as a merkledag

  • Decentralized: objects can be created by anyone, without centralized writers

In turn, these yield properties for the system as a whole:

  • Links are content addressed

  • Objects can be served by untrusted agents

  • Objects can be cached permanently

  • Objects can be created and used offline

  • Networks can be partitioned and merged

  • Any datastructure can be modelled and distributed

IPFS is a stack of network protocols that organize agent networks to create, publish, distribute, serve, and download merkledags. It is the authenticated, decentralized, permanent web.

Nodes and Network Model

The IPFS network uses PKI based identity. An "ipfs node" is a program that can find, publish, and replicate merkledag objects. Its identity is defined by a private key. Specifically:

privateKey, publicKey := keygen()
nodeID := multihash(publicKey)

IPFS Cluster

IPFS Cluster:

  • Runs independent from the rest of the IPFS Swarm

  • Performs actions that make it simple to add pins at scale, utilizing a set of 'cluster peers'

  • The cluster peers take care of asking IPFS to pin things at a sustainable rate and retry pinning in case of failures

ipfs subsystem 2

This is an

See more in the .

is a distributed application that works as a sidecar to IPFS peers, maintaining a global cluster pinset and intelligently allocating its items to the IPFS peers. IPFS Cluster powers large IPFS storage services like nft.storage and web3.storage

annotated version of the architecture in the specs repo
IPFS keystore spec
IPFS Cluster
annotated version of the subsystems Repo