-
Notifications
You must be signed in to change notification settings - Fork 89
Expand file tree
/
Copy pathgoals.json
More file actions
547 lines (545 loc) · 16.3 KB
/
goals.json
File metadata and controls
547 lines (545 loc) · 16.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
{
"pln": {
"1.1": {
"description": "Know what the PL Network is, how Protocol Labs evolved from company to network, as well as the projects, tooling, and DApps being built on the PLN",
"subgoals": []
},
"1.2": {
"description": "Understand what the resources and tools are within the PL Network to support teams, individuals, companies, and general growth of our mission",
"subgoals": []
},
"1.3": {
"description": "Understand the methods and philosophies about how work and communication is carried out in the Protocol Labs Network & within PLN open source communities",
"subgoals": []
}
},
"ipfs": {
"1.0": {
"description": "Understand what IPFS is and why IPFS was started",
"subgoals": [
{
"id": "1.01",
"description": "Understand what is a peer to peer (p2p) network"
},
{
"id": "1.02",
"description": "Know the difference between centralised, decentralised, and distributed networks"
},
{
"id": "1.03",
"description": "Describe limitations and challenges with centralized services versus p2p systems"
},
{
"id": "1.04",
"description": "Understand how IPFS is trying to design systems that are future-proof"
},
{
"id": "1.05",
"description": "Describe, high level, some of the solutions posed by IPFS"
}
],
"levels": ["shallow", "deep"]
},
"1.1": {
"description": "Understand Content Addressing, CIDs, and what advantages they present over location-based addressing",
"subgoals": [
{
"id": "1.11",
"description": "Be able to describe what mutable data is, and why content in IPFS is immutable"
},
{
"id": "1.12",
"description": "Understand difference between location addressing vs content addressing"
},
{
"id": "1.13",
"description": "Know the different types of CIDs, and what a CID is made up of"
},
{
"id": "1.14",
"description": "Understand why data on IPFS needs to be pinned to be made available to the network"
},
{
"id": "1.15",
"description": "Identify how a garbage collection process is done on an IPFS node and how to keep data discoverable on IPFS"
}
],
"levels": ["shallow", "deep"]
},
"1.2": {
"description": "Be able to explain how content is shared on IPFS",
"subgoals": [
{
"id": "1.21",
"description": "Be able to describe what content identifiers and mutable data are"
},
{
"id": "1.22",
"description": "Understand the challenges posed in a decentralized content sharing system"
},
{
"id": "1.23",
"description": "Understand the basics of the public DHT"
},
{
"id": "1.24",
"description": "Be able to explain what a peer, node, and swarm are in the context of IPFS"
}
],
"levels": ["shallow", "deep"]
},
"1.3":{
"description": "Learn about IPFS Gateways and how they help bridge information between web2 and web3",
"subgoals":[
{
"id": "1.31",
"description": "Know the methods to address content in IPFS through Gateways"
},
{
"id": "1.32",
"description": "Get familiar with the work being done to bring native IPFS support to browsers"
},
{
"id": "1.33",
"description": "Learn about current public Gateways and how any node in the network can provide this service"
},
{
"id": "1.34",
"description": "Be able to name projects that use or build upon IPFS, and what those projects do"
}
],
"levels":["shallow", "deep"]
},
"1.4": {
"description": "Be able to explain the basics of data transfer in IPFS",
"subgoals": [
{
"id": "1.41",
"description": "Learn what is IPFS's message-oriented protocol to exchange data"
},
{
"id": "1.42",
"description": "Know what are the different message types and their order of operations"
},
{
"id": "1.43",
"description": "Understand what is the session and the ledger in the context of Bitswap"
},
{
"id": "1.44",
"description": "Explain the different components of Bitswap at a high level"
},
{
"id": "1.45",
"description": "Discover what advantages Graphsync has over Bitswap"
}
],
"levels": ["deep"]
},
"1.5":{
"description": "Gain knowledge of the IPFS architecture and the different components and services",
"subgoals":[
{
"id":"1.51",
"description": "Understand the flow of files that go through IPFS"
},
{
"id":"1.52",
"description": "Gain an introductory understanding of Linked Data"
},
{
"id":"1.53",
"description": "Demystify the core components that purely make up IPFS"
},
{
"id":"1.54",
"description": "Lean into technical details of mutable data on IPFS"
}
],
"levels":["deep"]
},
"1.6": {
"description": "Be able to explain the basics of UnixFS",
"subgoals": [
{
"id": "1.61",
"description": "Understand what is UnixFS and what problem it solves"
},
{
"id": "1.62",
"description": "Learn how files with more than a single block are labeled"
},
{
"id": "1.63",
"description": "Go over the protobuf format, and its main field"
}
],
"levels": ["deep"]
}
},
"ipld": {
"1.0": {
"description": "Understand how and why IPLD was created",
"subgoals":[
{
"id": "1.01",
"description": "Know what separates IPFS from IPLD"
},
{
"id": "1.02",
"description": "Describe use cases of IPLD"
},
{
"id":"1.03",
"description": "Have a basic background knowledge of what makes a CID"
}
],
"levels": ["shallow", "deep"]
},
"1.1": {
"description": "Understand how IPLD addresses data in a Content-Addressed system",
"subgoals": [
{
"id": "1.11",
"description": "Identify the differences between CID versions and their properties"
},
{
"id": "1.12",
"description": "Understand the multiformats involved in generating a CID"
},
{
"id": "1.13",
"description": "Use the CID Inspector to break down and analyze CIDs"
}
],
"levels": ["shallow", "deep"]
},
"1.2": {
"description": "Be able to describe graph data structures and Merkle DAG",
"subgoals": [
{
"id": "1.21",
"description": "Understand how a Merkle DAG is different from other type of graphs"
},
{
"id": "1.22",
"description": "Learn how files get broken down to DAGs"
},
{
"id": "1.23",
"description": "Learn what happens when a Merkle Dag is mutated"
}
],
"levels": ["shallow", "deep"]
},
"1.3": {
"description": "Understand how IPLD operates in the context of IPFS",
"subgoals": [
{
"id": "1.31",
"description": "Understand the complete picture of adding a file to IPFS"
},
{
"id": "1.32",
"description": "Make sense of how UnixFS interoperates with DAG structures"
},
{
"id": "1.33",
"description": "Identify what kind of data types can you use with IPLD"
},
{
"id": "1.34",
"description": "Define the various encodings and data formats used in IPLD"
}
],
"levels": ["shallow", "deep"]
},
"1.4": {
"description": "Go over the underlying data types and formats in IPLD",
"subgoals":[
{
"id": "1.41",
"description": "Understand the different types of data used with IPLD"
},
{
"id": "1.42",
"description": "Discover the default codec in IPFS and how it differs from other IPLD-native codecs"
},
{
"id": "1.43",
"description": "Describe how IPLD is interoperable with other addressed systems"
},
{
"id": "1.44",
"description": "Understand how Schemas provide encoding and storage convenience for application developers"
}
],
"levels": ["deep"]
},
"1.5": {
"description": "Gain a conceptual understanding on what algorithms we use with Merkle DAGs to build distributed data structures",
"subgoals": [
{
"id": "1.51",
"description": "Understand what makes distributed data structures so powerful"
},
{
"id": "1.52",
"description": "Learn the basics of the HAMT algorithm operations"
},
{
"id": "1.53",
"description": "How to traverse a Merkle DAG with IPLD pathing"
}
],
"levels":["deep"]
},
"1.6": {
"description": "Learn about the CAR format and how it helps data distribution",
"subgoals": [
{
"id": "1.61",
"description": "Get an idea of how the CAR format is beneficial to IPLD and how it is used today"
},
{
"id": "1.62",
"description": "See the differences between the two CAR version formats"
}
],
"levels": ["deep"]
}
},
"libp2p": {
"1.0": {
"description": "Understand what libp2p is and the benefits it provides",
"subgoals": [
{
"id": "1.01",
"description": "Understand the difference between the p2p and client-server model"
},
{
"id": "1.02",
"description": "Describe the technical & political benefits and challenges of peer-to-peer architectures"
},
{
"id": "1.03",
"description": "Discover resources to understand the long term objectives and use cases for libp2p"
}
],
"levels": ["shallow", "deep"]
},
"1.1": {
"description": "Understand the main building blocks of libp2p",
"subgoals": [
{
"id": "1.11",
"description": "Identify the main transport protocols supported with the libp2p stack"
},
{
"id": "1.12",
"description": "Learn about the several NAT traversal with libp2p"
},
{
"id": "1.13",
"description": "Understand what stream multiplexing is, and what benefits it provides"
},
{
"id": "1.14",
"description": "Be able to explain the benefits of Multiaddresses"
}
],
"levels": ["shallow", "deep"]
},
"1.2": {
"description": "Understand how libp2p establishes connections",
"subgoals": [
{
"id": "1.21",
"description": "Define concepts of nodes, peers, and peer identities in an independent peer to peer network"
},
{
"id": "1.22",
"description": "Understand how peer identity is generated"
},
{
"id": "1.23",
"description": "Describe the steps involved in opening a connection including handshakes, security, and multiplexing"
},
{
"id": "1.24",
"description": "Identify how multiplexing is useful to use several application protocols over the same connection"
}
],
"levels": ["shallow", "deep"]
},
"1.3": {
"description": "Understand the content routing mechanisms used in a Distributed Hash Table",
"subgoals": [
{
"id": "1.31",
"description": "Describe the distance metric used by the DHT"
},
{
"id": "1.32",
"description": "Understand how the routing table facilitates peer discovery"
},
{
"id": "1.33",
"description": "Be able to describe the basic operations of the DHT"
}
],
"levels": ["deep"]
},
"1.4": {
"description": "Understand what is Pub/Sub and its main implementations in libp2p",
"subgoals": [
{
"id": "1.41",
"description": "Understand what Floodsub is and how it transmit messages"
},
{
"id": "1.42",
"description": "Analyze the main differences between FloodSub and Gossipsub"
},
{
"id": "1.43",
"description": "Describe the benefits of Gossipsub over Floodsub"
}
],
"levels": ["deep"]
},
"1.5": {
"description": "Learn what NAT Traversal is, and what different methods are available",
"subgoals": [
{
"id": "1.51",
"description": "Describe how a Circuit Relay works"
},
{
"id": "1.52",
"description": "Identify the main differences between Circuit Relay and Hole Punching"
}
],
"levels": ["deep"]
}
},
"filecoin": {
"1.0": {
"description": "Understand how and why Filecoin was created, how it relates to IPFS, and how it is growing and expanding for different use cases",
"subgoals": [
{
"id": "1.01",
"description": "Understand the basics of how Filecoin leverages and implements other technologies such as IPFS, libp2p, Saturn, FVM, and Bacalhau"
},
{
"id": "1.02",
"description": " Describe how Filecoin provides and alternative to the client server model, and the key traits of the network that make that possible"
},
{
"id": "1.03",
"description": "Identify the different implementation of the Filecoin protocol, and the resources available to use them"
},
{
"id": "1.04",
"description": "Define the basic building blocks of the Filecoin network such as Providers, Deals, Sectors, and …"
}
],
"levels": ["shallow", "deep"]
},
"1.1": {
"description": "Know what...",
"subgoals": [
{
"id": "1.11",
"description": "Understand ..."
},
{
"id": "1.12",
"description": "Be able to ..."
},
{
"id": "1.13",
"description": "Be able to ..."
}
],
"levels": ["shallow"]
},
"1.2": {
"description": "Understand ...",
"subgoals": [],
"levels": ["shallow"]
},
"1.3": {
"description": "Describe ...",
"subgoals": [],
"levels": ["shallow"]
},
"1.4": {
"description": "Describe ...",
"subgoals": [],
"levels": ["deep"]
},
"1.5": {
"description": "Describe ...",
"subgoals": [],
"levels": ["deep"]
}
},
"dev-tools": {
"1.1": {
"description": "Understand what are Dev-Tools and why they are important for developers.",
"subgoals": []
},
"1.2": {
"description": "Get to know the main Dev-Tools available in the IPFS and Filecoin ecosystem.",
"subgoals": []
},
"1.3": {
"description": "Know how you can add you own Dev-Tools to the Launchpad curriculum, so that other people can learn about them.",
"subgoals": []
}
},
"example-section": {
"1.0": {
"description": "Know what...",
"subgoals": [
{
"id": "1.01",
"description": "Understand ..."
},
{
"id": "1.02",
"description": "Be able to ..."
},
{
"id": "1.03",
"description": "Be able to ..."
}
],
"levels": [
"shallow", "deep"
]
},
"1.1": {
"description": "Understand ...",
"subgoals": [],
"levels": [
"shallow", "deep"
]
},
"1.2": {
"description": "Understand ...",
"subgoals": [],
"levels": [
"shallow", "deep"
]
},
"1.3": {
"description": "Describe ...",
"subgoals": [],
"levels": [
"shallow", "deep"
]
}
}
}