You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ARCHITECTURE.md
+13-13
Original file line number
Diff line number
Diff line change
@@ -21,7 +21,7 @@ Note, this document is not meant to be an introduction of the concepts in IPFS a
21
21
-1. IPFS and the Merkle DAG
22
22
-2. Nodes and Network Model
23
23
-3. The Stack
24
-
-4. Applications and Datastructures -- on top of IPFS
24
+
-4. Applications and data structures -- on top of IPFS
25
25
-5. Lifetime of fetching an object
26
26
-6. IPFS User Interfaces
27
27
@@ -31,7 +31,7 @@ At the heart of IPFS is the MerkleDAG, a directed acyclic graph whose links are
31
31
32
32
- authenticated: content can be hashed and verified against the link
33
33
- permanent: once fetched, objects can be cached forever
34
-
- universal: any datastructure can be represented as a merkledag
34
+
- universal: any data structure can be represented as a merkledag
35
35
- decentralized: objects can be created by anyone, without centralized writers
36
36
37
37
In turn, these yield properties for the system as a whole:
@@ -41,7 +41,7 @@ In turn, these yield properties for the system as a whole:
41
41
- objects can be cached permanently
42
42
- objects can be created and used offline
43
43
- networks can be partitioned and merged
44
-
- any datastructure can be modelled and distributed
44
+
- any data structure can be modelled and distributed
45
45
- (todo: list more)
46
46
47
47
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.
@@ -78,7 +78,7 @@ IPFS has a stack of modular protocols. Each layer may have multiple implementati
78
78
IPFS has five layers:
79
79
80
80
-**naming** - a self-certifying PKI namespace (IPNS)
81
-
-**merkledag** - datastructure format (thin waist)
81
+
-**merkledag** - data structure format (thin waist)
82
82
-**exchange** - block transport and replication
83
83
-**routing** - locating peers and objects
84
84
-**network** - establishing connections between peers
@@ -103,7 +103,7 @@ The IPFS **Routing** layer serves two important purposes:
103
103
-**peer routing** -- to find other nodes
104
104
-**content routing** -- to find data published to ipfs
105
105
106
-
The Routing Sytem is an interface that is satisfied by various kinds of implementations. For example:
106
+
The Routing System is an interface that is satisfied by various kinds of implementations. For example:
107
107
108
108
-**DHTs:** perhaps the most common, DHTs can be used to create a semi-persistent routing record distributed cache in the network.
109
109
-**mdns:** used to find services advertised locally. `mdns` (or `dnssd`) is a local discovery service. We will be using it.
@@ -119,12 +119,12 @@ The IPFS **Block Exchange** takes care of negotiating bulk data transfers. Once
119
119
The Block Exchange is an interface that is satisfied by various kinds of implementations. For example:
120
120
121
121
-**Bitswap:** our main protocol for exchanging data. It is a generalization
122
-
of BitTorrent to work with arbitrary (and not known apriori) DAGs.
122
+
of BitTorrent to work with arbitrary (and not known a priori) DAGs.
123
123
-**HTTP:** a simple exchange can be implemented with HTTP clients and servers.
124
124
125
125
## 3.4. Merkledag -- making sense of data
126
126
127
-
[As discussed above](#IPFS-and-the-Merkle-DAG), the IPFS **merkledag** (also known as IPLD - InterPlanetary Linked Data) is the datastructure at the heart of IPFS. It is an [acyclic directed graph](http://en.wikipedia.org/wiki/Directed_acyclic_graph) whose edges are hashes. Another name for it is the merkleweb.
127
+
[As discussed above](#IPFS-and-the-Merkle-DAG), the IPFS **merkledag** (also known as IPLD - InterPlanetary Linked Data) is the data structure at the heart of IPFS. It is an [acyclic directed graph](http://en.wikipedia.org/wiki/Directed_acyclic_graph) whose edges are hashes. Another name for it is the merkleweb.
128
128
129
129
The merkledag data structure is:
130
130
@@ -141,7 +141,7 @@ message MDagNode {
141
141
}
142
142
```
143
143
144
-
The merkledag is the "thin waist" of authenticated datastructures. It is a minimal set of information needed to represent + transfer arbitrary authenticated datastructures. More complex datastructures are implemented on top of the merkledag, such as:
144
+
The merkledag is the "thin waist" of authenticated data structures. It is a minimal set of information needed to represent + transfer arbitrary authenticated data structures. More complex data structures are implemented on top of the merkledag, such as:
145
145
146
146
-**git** and other version control systems
147
147
-**bitcoin** and other blockchains
@@ -177,17 +177,17 @@ IPNS is based on [SFS](http://en.wikipedia.org/wiki/Self-certifying_File_System)
177
177
178
178
See more in the [IPNS spec](https://github.com/ipfs/specs/blob/master/IPNS.md).
179
179
180
-
# 4. Applications and Datastructures -- on top of IPFS
180
+
# 4. Applications and Data Structures -- on top of IPFS
181
181
182
-
The stack described so far is enough to represent arbitrary datastructures and replicate them across the internet. It is also enough to build and deploy decentralized websites.
182
+
The stack described so far is enough to represent arbitrary data structures and replicate them across the internet. It is also enough to build and deploy decentralized websites.
183
183
184
-
Applications and datastructures on top of IPFS are represented as merkledags. Users can create arbitrary datastructures that extend the merkledag and deploy them to the rest of the world using any of the tools that understand IPFS.
184
+
Applications and data structures on top of IPFS are represented as merkledags. Users can create arbitrary data structures that extend the merkledag and deploy them to the rest of the world using any of the tools that understand IPFS.
185
185
186
-
See more in the [IPLD datastructures specs](https://github.com/ipld/specs/tree/master/data-structures).
186
+
See more in the [IPLD data structures specs](https://github.com/ipld/specs/tree/master/data-structures).
187
187
188
188
## 4.1 unixfs -- representing traditional files
189
189
190
-
The unix filesystem abstractions -- files and directories -- are the main way people conceive of files in the internet. In IPFS, `unixfs` is a datastructure that represents unix files on top of IPFS. We need a separate datastructure to carry over information like:
190
+
The unix filesystem abstractions -- files and directories -- are the main way people conceive of files in the internet. In IPFS, `unixfs` is a data structure that represents unix files on top of IPFS. We need a separate data structure to carry over information like:
191
191
192
192
- whether the object represents a file or directory.
Copy file name to clipboardExpand all lines: IMPORTERS_EXPORTERS.md
+4-4
Original file line number
Diff line number
Diff line change
@@ -28,7 +28,7 @@ Lots of discussions around this topic, some of them here:
28
28
29
29
## Introduction
30
30
31
-
Importing data into IPFS can be done in a variety of ways. These are use-case specific, produce different datastructures, produce different graph topologies, and so on. These are not strictly needed in an IPFS implementation, but definitely make it more useful.
31
+
Importing data into IPFS can be done in a variety of ways. These are use-case specific, produce different data structures, produce different graph topologies, and so on. These are not strictly needed in an IPFS implementation, but definitely make it more useful.
32
32
33
33
These data importing primitives are really just tools on top of IPLD, meaning that these can be generic and separate from IPFS itself.
34
34
@@ -44,7 +44,7 @@ Essentially, data importing is divided into two parts:
44
44
- fixed size chunking (also known as dumb chunking)
45
45
- rabin fingerprinting
46
46
- dedicated format chunking, these require knowledge of the format and typically only work with certain time of files (e.g. video, audio, images, etc)
47
-
- special datastructures chunking, formats like, tar, pdf, doc, container and/org vm images fall into this category
47
+
- special data structures chunking, formats like, tar, pdf, doc, container and/org vm images fall into this category
48
48
49
49
### Goals
50
50
@@ -78,9 +78,9 @@ These are a set of requirements (or guidelines) of the expectations that need to
78
78
```
79
79
80
80
-`chunkers or splitters` algorithms that read a stream and produce a series of chunks. for our purposes should be deterministic on the stream. divided into:
81
-
-`universal chunkers` which work on any streams given to them. (eg size, rabin, etc). should work roughly equally well across inputs.
81
+
-`universal chunkers` which work on any streams given to them. (e.g. size, rabin, etc). should work roughly equally well across inputs.
82
82
-`specific chunkers` which work on specific types of files (tar splitter, mp4 splitter, etc). special purpose but super useful for big files and special types of data.
83
-
-`layouts or topologies` graph topologies (eg balanced vs trickledag vs ext4, ... etc)
83
+
-`layouts or topologies` graph topologies (e.g. balanced vs trickledag vs ext4, ... etc)
84
84
-`importer` is a process that reads in some data (single file, set of files, archive, db, etc), and outputs a dag. may use many chunkers. may use many layouts.
Copy file name to clipboardExpand all lines: MERKLE_DAG.md
+5-5
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@
12
12
13
13
The _ipfs merkledag_ is a directed acyclic graph whose edges are merkle-links. This means that links to objects can authenticate the objects themselves, and that every object contains a secure representation of its children.
14
14
15
-
This is a powerful primitive for distributed systems computations. The merkledag simplifies distributed protocols by providing an append-only authenticated datastructure. Parties can communicate and exchange secure references (merkle-links) to objects. The references are enough to verify the correctness of the object at a later time, which allows the objects themselves to be served over untrusted channels. Merkledags also allow the branching of a datastructure and subsequent merging, as in the version control system git. More generally, merkledags simplify the construction of Secure [CRDTs](http://en.wikipedia.org/wiki/Conflict-free_replicated_data_type), which enable distributed, convergent, commutative computation in an authenticated, secure way.
15
+
This is a powerful primitive for distributed systems computations. The merkledag simplifies distributed protocols by providing an append-only authenticated data structure. Parties can communicate and exchange secure references (merkle-links) to objects. The references are enough to verify the correctness of the object at a later time, which allows the objects themselves to be served over untrusted channels. Merkledags also allow the branching of a data structure and subsequent merging, as in the version control system git. More generally, merkledags simplify the construction of Secure [CRDTs](http://en.wikipedia.org/wiki/Conflict-free_replicated_data_type), which enable distributed, convergent, commutative computation in an authenticated, secure way.
16
16
17
17
## Table of Contents
18
18
@@ -23,7 +23,7 @@ TODO
23
23
-`hash` - throughout this document, the word `hash` refers specifically to cryptographic hash functions, such as sha3.
24
24
-`dag` - directed acyclic graph
25
25
-`merkle-link` - a link (graph edge) between two objects, which is (a) represented by the hash of the target object, and (b) embedded in the source object. merkle-links construct graphs (dags) whose links are content-addressed, and authenticated.
26
-
-`merkledag` - the merkledag is a directed acyclic graph whose links are merkle-links (hashes of the content). It is a hash tree, and (under a very loose definition) a merkle tree. Alternative names: the merkle-web, the merkle-forest, the merkle-chain.
26
+
-`merkledag` - the merkledag is a directed acyclic graph whose links are merkle-links (hashes of the content). It is a hash tree, and (under a very loose definition) a Merkle tree. Alternative names: the merkle-web, the merkle-forest, the merkle-chain.
27
27
-`multihash` - the [multihash](https://github.com/jbenet/multihash) format / protocol.
28
28
-`ipfs object` - a node in the ipfs merkledag. It represents a singular entity.
29
29
-`merkledag format` - the format that ipfs objects are expressed with.
@@ -83,7 +83,7 @@ The logical representation is serialized into raw bytes using _protocol buffers_
83
83
### Real World Examples
84
84
85
85
Many successful distributed systems employ specialized merkledags at their core:
86
-
-merkle trees -- a special case of the merkle dag -- are a well known cryptographic technique used to authenticate large amounts of data. The original use case involved one-time lamport signatures.
86
+
-Merkle trees -- a special case of the merkledag -- are a well known cryptographic technique used to authenticate large amounts of data. The original use case involved one-time lamport signatures.
87
87
- SFS-RO turns a unix filesystem into a merkledag, constructing a secure, distributed filesystem.
88
88
- git uses a merkledag to enable distributed version control and source code management. Other DVCSes, such as mercurial and monotone, also feature a merkledag.
89
89
- plan9 uses a merkledag to construct its snapshotting filesystems -- Fossil and Venti.
@@ -106,7 +106,7 @@ This kind of modularity enables complicated and powerful applications to be buil
106
106
107
107
### Web of Data Structures
108
108
109
-
In a sense, IPFS is a "web of data-structures", with the merkledag as the common denominator. Agreeing upon a format allows linking different authenticated datastructures to each other, enabling sophisticated distributed applications to easily construct, distribute, and link their data.
109
+
In a sense, IPFS is a "web of data-structures", with the merkledag as the common denominator. Agreeing upon a format allows linking different authenticated data structures to each other, enabling sophisticated distributed applications to easily construct, distribute, and link their data.
110
110
111
111
### Linked Data
112
112
@@ -116,7 +116,7 @@ A powerful result of content (and identity) addressing is that linked data defin
116
116
117
117
## Merkledag Notation
118
118
119
-
To facilitate the definition of other data structures and protocols, we define a notation to express merkledag datastructures. This defines their logical representation, and also a format specification (when using the ipfs merkledag format).
119
+
To facilitate the definition of other data structures and protocols, we define a notation to express merkledag data structures. This defines their logical representation, and also a format specification (when using the ipfs merkledag format).
Copy file name to clipboardExpand all lines: REPO_FS.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -47,7 +47,7 @@ This spec defines `fs-repo` version `1`, its formats, and semantics.
47
47
`./api` is a file that exists to denote an API endpoint to listen to.
48
48
- It MAY exist even if the endpoint is no longer live (i.e. it is a _stale_ or left-over `./api` file).
49
49
50
-
In the presence of an `./api` file, ipfs tools (eg go-ipfs `ipfs daemon`) MUST attempt to delegate to the endpoint, and MAY remove the file if reasonably certain the file is stale. (e.g. endpoint is local, but no process is live)
50
+
In the presence of an `./api` file, ipfs tools (e.g. go-ipfs `ipfs daemon`) MUST attempt to delegate to the endpoint, and MAY remove the file if reasonably certain the file is stale. (e.g. endpoint is local, but no process is live)
51
51
52
52
The `./api` file is used in conjunction with the `repo.lock`. Clients may opt to use the api service, or wait until the process holding `repo.lock` exits. The file's content is the api endpoint as a [multiaddr](https://github.com/jbenet/multiaddr)
Copy file name to clipboardExpand all lines: http-gateways/REDIRECTS_FILE.md
+2-2
Original file line number
Diff line number
Diff line change
@@ -34,7 +34,7 @@ This can be used, for example, to enable URL rewriting for hosting a single-page
34
34
-[No Forced Redirects](#no-forced-redirects)
35
35
-[Error Handling](#error-handling)
36
36
-[Security](#security)
37
-
-[Appendix: notes for implementors](#appendix-notes-for-implementors)
37
+
-[Appendix: notes for implementers](#appendix-notes-for-implementors)
38
38
-[Test fixtures](#test-fixtures)
39
39
40
40
# File Name and Location
@@ -150,7 +150,7 @@ Parsing of the `_redirects` file should be done safely to prevent any sort of in
150
150
151
151
The [max file size](#max-file-size) helps to prevent an additional [denial of service attack](https://en.wikipedia.org/wiki/Denial-of-service_attack) vector.
0 commit comments