diff --git a/cypress/fixtures/tutorials.json b/cypress/fixtures/tutorials.json index 0b641f2f5..4d3c4da43 100644 --- a/cypress/fixtures/tutorials.json +++ b/cypress/fixtures/tutorials.json @@ -13,7 +13,7 @@ "description": "Wondering how the Mutable File System (MFS) can treat immutable data as though it's mutable? Jeromy Johnson of Protocol Labs explains the abstraction that makes it possible." } ], - "updateMessage": "The version `0.41` of `js-ipfs` has introduced some major changes, most notably, introducing Async Iterables. You can learn more about it here: [IPFS Blog - The Async Await Refactor](https://blog.ipfs.io/2020-02-01-async-await-refactor/). This means that **some code challenges solutions have changed**, so if you want to re-visit them, follow the new instructions to complete the challenges!", + "updateMessage": "The version `0.41` of `js-ipfs` has introduced some major changes, most notably, introducing Async Iterables. You can learn more about it here: [IPFS Blog - The Async Await Refactor](https://blog.ipfs.tech/2020-02-01-async-await-refactor/). This means that **some code challenges solutions have changed**, so if you want to re-visit them, follow the new instructions to complete the challenges!", "createdAt": "2019-01-01T00:00:00.000Z", "updatedAt": "2020-03-02T00:00:00.000Z" }, @@ -31,7 +31,7 @@ "description": "You've seen the IPFS Files API. Now explore the IPFS DAG API, where you'll use CIDs to create verifiable links between datasets." } ], - "updateMessage": "The version `0.41` of `js-ipfs` has introduced some major changes, most notably, introducing Async Iterables. You can learn more about it here: [IPFS Blog - The Async Await Refactor](https://blog.ipfs.io/2020-02-01-async-await-refactor/). This means that **some code challenges solutions have changed**, so if you want to re-visit them, follow the new instructions to complete the challenges!", + "updateMessage": "The version `0.41` of `js-ipfs` has introduced some major changes, most notably, introducing Async Iterables. You can learn more about it here: [IPFS Blog - The Async Await Refactor](https://blog.ipfs.tech/2020-02-01-async-await-refactor/). This means that **some code challenges solutions have changed**, so if you want to re-visit them, follow the new instructions to complete the challenges!", "createdAt": "2019-01-01T00:00:00.000Z", "updatedAt": "2020-03-02T00:00:00.000Z" }, diff --git a/src/components/Output.vue b/src/components/Output.vue index 1b5089d62..6838dad2b 100644 --- a/src/components/Output.vue +++ b/src/components/Output.vue @@ -61,7 +61,7 @@ export default { inspectCidUrl: function () { let cid = this.output.test && this.output.test.cid && this.output.test.cid.toString() - return `https://cid.ipfs.io/#${cid || ''}` + return `https://cid.ipfs.tech/#${cid || ''}` } }, methods: { diff --git a/src/pages/Build.vue b/src/pages/Build.vue index d04d5b0c0..2fec7761c 100644 --- a/src/pages/Build.vue +++ b/src/pages/Build.vue @@ -14,7 +14,7 @@ protocols, and tools that support the decentralized web. We're excited to add new tutorials to our collection, and we'd love your help brainstorming and building new content content about projects such as - IPFS, + IPFS, IPLD, libp2p, Multiformats, diff --git a/src/static/projects.json b/src/static/projects.json index 12a52fbf8..cd854dfd8 100644 --- a/src/static/projects.json +++ b/src/static/projects.json @@ -2,7 +2,7 @@ { "id": "ipfs", "name": "IPFS", - "url": "https://ipfs.io", + "url": "https://ipfs.tech", "twitterHashtag": "IPFS", "twitterHandle": "IPFS", "newsletterUrl": "http://eepurl.com/gL2Pi5" diff --git a/src/static/translations/en.json b/src/static/translations/en.json index 94b8a0f38..8bc599ec1 100644 --- a/src/static/translations/en.json +++ b/src/static/translations/en.json @@ -30,11 +30,11 @@ }, "courses": { "ipfs": { - "description": "The [InterPlanetary File System (IPFS)](https://ipfs.io) is a peer-to-peer network protocol for storing and sharing data in a distributed file system, with addresses based on content, not location. In this course, we'll dive into the basics of cryptographic hashing and content addressing on the decentralized web, take a look at how Content Identifiers (CIDs) are constructed in IPFS, and get hands on with the js-ipfs API. Through JavaScript coding challenges, we'll learn to store and share files with peers, create links between Merkle DAGs, and explore the Mutable File System (MFS), which lets you work with content-addressed files and directories as if you were using a traditional named-based file system. As we go, we'll learn more about other protocol layers of the Web3 stack that work in parallel with IPFS, including Multiformats, IPLD, libp2p, and Filecoin.", + "description": "The [InterPlanetary File System (IPFS)](https://ipfs.tech) is a peer-to-peer network protocol for storing and sharing data in a distributed file system, with addresses based on content, not location. In this course, we'll dive into the basics of cryptographic hashing and content addressing on the decentralized web, take a look at how Content Identifiers (CIDs) are constructed in IPFS, and get hands on with the js-ipfs API. Through JavaScript coding challenges, we'll learn to store and share files with peers, create links between Merkle DAGs, and explore the Mutable File System (MFS), which lets you work with content-addressed files and directories as if you were using a traditional named-based file system. As we go, we'll learn more about other protocol layers of the Web3 stack that work in parallel with IPFS, including Multiformats, IPLD, libp2p, and Filecoin.", "seoDescription": "Interactive tutorials on IPFS, the peer-to-peer network protocol for storing and sharing data in a distributed file system, with addresses based on content, not location." }, "multiformats": { - "description": "[Multiformats](https://multiformats.io) is a collection of protocols that encode self-describing values for content-addressed data on the distributed web. The course begins with a tutorial introducing content addressing and cryptographic hashing, key building blocks of the decentralized web. In our next tutorial, we'll take a deep dive into the properties of CIDs (Content Identifiers), the unique labels used to point to data stored on distributed information systems including IPFS, Filecoin, libp2p, and IPLD. Along the way, we'll find lessons on the cryptographic hashing algorithms described by multihash, encoding systems described by multicodec, CID versions described by version prefixes, and base encoding methods described by multibase. We'll even explore the [CID Inspector](https://cid.ipfs.io/), a tool for breaking down CIDs into human-readable properties.", + "description": "[Multiformats](https://multiformats.io) is a collection of protocols that encode self-describing values for content-addressed data on the distributed web. The course begins with a tutorial introducing content addressing and cryptographic hashing, key building blocks of the decentralized web. In our next tutorial, we'll take a deep dive into the properties of CIDs (Content Identifiers), the unique labels used to point to data stored on distributed information systems including IPFS, Filecoin, libp2p, and IPLD. Along the way, we'll find lessons on the cryptographic hashing algorithms described by multihash, encoding systems described by multicodec, CID versions described by version prefixes, and base encoding methods described by multibase. We'll even explore the [CID Inspector](https://cid.ipfs.tech/), a tool for breaking down CIDs into human-readable properties.", "seoDescription": "Interactive tutorials on Multiformats, a collection of protocols that encode self-describing values for content-addressed data in distributed web projects like IPFS, Filecoin, libp2p, and IPLD." }, "filecoin": { diff --git a/src/static/tutorials.json b/src/static/tutorials.json index 9430525f0..3df4a9073 100644 --- a/src/static/tutorials.json +++ b/src/static/tutorials.json @@ -286,13 +286,13 @@ }, { "title": "CID Inspector", - "link": "https://cid.ipfs.io/", + "link": "https://cid.ipfs.tech/", "type": "tool", "description": "Paste a CID into this handy web app for a human-readable breakdown of its multibase, multicodec, multihash and version." }, { "title": "Hashes", - "link": "https://docs.ipfs.io/concepts/hashing/", + "link": "https://docs.ipfs.tech/concepts/hashing/", "type": "docs", "description": "Learn more about cryptographic hashes in the official IPFS docs." }, diff --git a/src/tutorials/0001-content-addressing/04.md b/src/tutorials/0001-content-addressing/04.md index c2c9b66f1..37db5e28e 100644 --- a/src/tutorials/0001-content-addressing/04.md +++ b/src/tutorials/0001-content-addressing/04.md @@ -10,8 +10,8 @@ to know what data format we're working with and use an appropriate tool. ## Decoding data structures -A [`CID (Content Identifier)`](https://docs.ipfs.io/concepts/content-addressing/) is a particular form of content addressing used on the decentralized web. It was developed for -[`IPFS`](https://ipfs.io) (a decentralized web protocol which we'll discuss in later tutorials), but has very broad implications. +A [`CID (Content Identifier)`](https://docs.ipfs.tech/concepts/content-addressing/) is a particular form of content addressing used on the decentralized web. It was developed for +[`IPFS`](https://ipfs.tech) (a decentralized web protocol which we'll discuss in later tutorials), but has very broad implications. A `CID` is a single identifier that contains both a **cryptographic hash** and a **codec**, which holds information about how to interpret that data. Codecs encode and diff --git a/src/tutorials/0004-mutable-file-system/01.md b/src/tutorials/0004-mutable-file-system/01.md index d4ed94594..d887b6790 100644 --- a/src/tutorials/0004-mutable-file-system/01.md +++ b/src/tutorials/0004-mutable-file-system/01.md @@ -5,7 +5,7 @@ ## IPFS: The InterPlanetary File System -[IPFS](https://ipfs.io/), or the InterPlanetary File System, is a peer-to-peer (P2P) networking protocol used to share data on the distributed web. As its full name suggests, you can think of IPFS as a file system, and it has some unique characteristics that make it ideal for safe, decentralized sharing. +[IPFS](https://ipfs.tech/), or the InterPlanetary File System, is a peer-to-peer (P2P) networking protocol used to share data on the distributed web. As its full name suggests, you can think of IPFS as a file system, and it has some unique characteristics that make it ideal for safe, decentralized sharing. If you haven't yet done so, we encourage you to check out our [Content Addressing on the Decentralized Web](https://proto.school/content-addressing/) tutorial, where you can learn all about the decentralized web and how it compares to the web you're accustomed to. There you'll learn all about content addressing, cryptographic hashing, Content Identifiers (CIDs), and sharing with peers, all of which you'll need to understand to make the most of this tutorial on IPFS. diff --git a/src/tutorials/0004-mutable-file-system/02.md b/src/tutorials/0004-mutable-file-system/02.md index a8c952228..301c5e405 100644 --- a/src/tutorials/0004-mutable-file-system/02.md +++ b/src/tutorials/0004-mutable-file-system/02.md @@ -6,7 +6,7 @@ ## Working with files in ProtoSchool Here in our ProtoSchool tutorials, we create a new IPFS node for you in the browser each time you hit the "Submit" button in a lesson. Whenever you see `ipfs.someMethod()` in our lessons, `ipfs` is a variable that refers to your IPFS instance, also known as a node. The actions that you take only affect your own IPFS node, not nodes belonging to your peers. -We're creating your IPFS node behind the scenes so you can focus on the content of our lessons, but eventually you'll need to learn to host your own node locally by installing IPFS and running a daemon in your terminal. When you're ready to experiment, you can find instructions for [installing IPFS](https://docs.ipfs.io/install/) and [initializing your node](https://docs.ipfs.io/how-to/command-line-quick-start/#initialize-the-repository) in our docs. +We're creating your IPFS node behind the scenes so you can focus on the content of our lessons, but eventually you'll need to learn to host your own node locally by installing IPFS and running a daemon in your terminal. When you're ready to experiment, you can find instructions for [installing IPFS](https://docs.ipfs.tech/install/) and [initializing your node](https://docs.ipfs.tech/how-to/command-line-quick-start/#initialize-the-repository) in our docs. As mentioned previously, methods associated with the Mutable File System are part of the [Files API](https://github.com/ipfs/js-ipfs/blob/master/docs/core-api/FILES.md#the-mutable-files-api), so they'll take the format of `ipfs.files.someMethod()`. Let's take a look at a simple method you can start using even before you've added any files to your IPFS node. diff --git a/src/tutorials/0005-regular-files-api/01.md b/src/tutorials/0005-regular-files-api/01.md index 3647d8262..360513a9b 100644 --- a/src/tutorials/0005-regular-files-api/01.md +++ b/src/tutorials/0005-regular-files-api/01.md @@ -5,7 +5,7 @@ ## IPFS: The InterPlanetary File System -[IPFS](https://ipfs.io/) is a peer-to-peer (P2P) networking protocol used to share data on the distributed web. You can think of it as a file system with some unique characteristics that make it ideal for safe, decentralized sharing. +[IPFS](https://ipfs.tech/) is a peer-to-peer (P2P) networking protocol used to share data on the distributed web. You can think of it as a file system with some unique characteristics that make it ideal for safe, decentralized sharing. If you haven't yet done so, we encourage you to check out our [Content Adddressing on the Decentralized Web](https://proto.school/content-addressing/) tutorial to learn all about the decentralized web and how it compares to the web you're accustomed to. There you'll learn all about content addressing, cryptographic hashing, Content Identifiers (CIDs), and sharing with peers, all of which you'll need to understand to make the most of this tutorial. diff --git a/src/tutorials/0005-regular-files-api/03.md b/src/tutorials/0005-regular-files-api/03.md index 4db80d130..2c553b29d 100644 --- a/src/tutorials/0005-regular-files-api/03.md +++ b/src/tutorials/0005-regular-files-api/03.md @@ -6,7 +6,7 @@ ## Working with files in ProtoSchool Here in our ProtoSchool tutorials, we create a new IPFS node for you in the browser each time you hit the "Submit" button in a lesson. Whenever you see `ipfs.someMethod()` in our lessons, `ipfs` is a variable that refers to your IPFS instance, also known as a node. This IPFS node is not carried over from one lesson to another, which is why you'll see that we often pre-populate some code in a challenge to make the state of your new IPFS node the same as the final state of your node in the previous challenge. -We create these IPFS nodes behind the scenes so that you can focus on the content of each lesson. Outside of ProtoSchool, though, you'd want a more consistent experience and a node (or multiple nodes) that you could access repeatedly. To achieve this, you could either initialize [js-ipfs in the browser](https://github.com/ipfs/js-ipfs/blob/master/docs/BROWSERS.md) on your own, or host your own node locally by installing IPFS and running a daemon in your terminal. When you're ready to experiment with that, you can visit the IPFS docs site to learn how to [install IPFS](https://docs.ipfs.io/install/) and [initialize your node](https://docs.ipfs.io/how-to/command-line-quick-start/#initialize-the-repository). +We create these IPFS nodes behind the scenes so that you can focus on the content of each lesson. Outside of ProtoSchool, though, you'd want a more consistent experience and a node (or multiple nodes) that you could access repeatedly. To achieve this, you could either initialize [js-ipfs in the browser](https://github.com/ipfs/js-ipfs/blob/master/docs/BROWSERS.md) on your own, or host your own node locally by installing IPFS and running a daemon in your terminal. When you're ready to experiment with that, you can visit the IPFS docs site to learn how to [install IPFS](https://docs.ipfs.tech/install/) and [initialize your node](https://docs.ipfs.tech/how-to/command-line-quick-start/#initialize-the-repository). As mentioned previously, the methods discussed in this tutorial are part of the IPFS [Files API](https://github.com/ipfs/js-ipfs/blob/master/docs/core-api/FILES.md). Check the documentation for more specific details, such as options for each API method. diff --git a/src/tutorials/0006-anatomy-of-a-cid/06.md b/src/tutorials/0006-anatomy-of-a-cid/06.md index d6eb1fe2f..ee8d48037 100644 --- a/src/tutorials/0006-anatomy-of-a-cid/06.md +++ b/src/tutorials/0006-anatomy-of-a-cid/06.md @@ -3,13 +3,13 @@ type: "multiple-choice" --- -You can paste any IPFS CID into the handy [CID Inspector](http://cid.ipfs.io/) to visualize all of its prefixes and what they represent. +You can paste any IPFS CID into the handy [CID Inspector](http://cid.ipfs.tech/) to visualize all of its prefixes and what they represent. In this final lesson we will take a look at some results from this tool using both CIDv0 and CIDv1 formats. ## Example 1: CIDv1 -[`bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi`](https://cid.ipfs.io/#bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi) +[`bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi`](https://cid.ipfs.tech/#bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi) This first example is a version 1 CID. @@ -26,7 +26,7 @@ From the "Human Readable CID" breakdown, we can see that the original hash of th ## Example 2: CIDv0 -[`QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR`](https://cid.ipfs.io/#QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR) +[`QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR`](https://cid.ipfs.tech/#QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR) ![Results from the CID Inspector tool for the first example](/tutorial-assets/T0006L06-example-2.png) @@ -52,7 +52,7 @@ However, because `CIDv1` supports multiple codecs and multiple bases and `CIDv0` To test this theory, you can check out our beloved aardvark image here, hosted on the IPFS network: https://ipfs.io/ipfs/QmcRD4wkPPi6dig81r5sLj9Zm1gDCL4zgpEj9CfuRrGbzF - Open the link in your browser and copy the CID from the end of the URL (`QmcRD4wkPPi6dig81r5sLj9Zm1gDCL4zgpEj9CfuRrGbzF`) -- In a new browser window, paste it into the [CID Inspector tool](https://cid.ipfs.io) and find the equivalent CIDv1 value displayed at the bottom of the screen +- In a new browser window, paste it into the [CID Inspector tool](https://cid.ipfs.tech) and find the equivalent CIDv1 value displayed at the bottom of the screen - Back in your aardvark tab, replace the `v0` CID with the converted `v1` CID in the original URL and refresh the page You should see the same image of our aardvark. diff --git a/src/tutorials/0009-introduction-to-libp2p/01.md b/src/tutorials/0009-introduction-to-libp2p/01.md index 8dfa04b41..fc63d6e78 100644 --- a/src/tutorials/0009-introduction-to-libp2p/01.md +++ b/src/tutorials/0009-introduction-to-libp2p/01.md @@ -7,7 +7,7 @@ -**[libp2p](https://libp2p.io) is a modular network stack** that evolved out of [IPFS](https://ipfs.io) to become an independent project. +**[libp2p](https://libp2p.io) is a modular network stack** that evolved out of [IPFS](https://ipfs.tech) to become an independent project. In order to explain why libp2p is such an important piece of the decentralized web, we need to take a few steps back and understand where it came from. libp2p's initial implementation began inside of IPFS, a peer-to-peer file sharing system. Let's start by exploring the networking problems that IPFS was built to tackle. @@ -26,7 +26,7 @@ There are so many things that can go wrong in this scenario, and the truth is, y A lot of the issues that we face come from using a [location addressing](/content-addressing/02) approach to find the content the user is looking for, and serving it from that address. For example, we expect our libp2p logo to be available at [https://proto.school/tutorial-assets/T0009L01-libp2p-logo.svg](/tutorial-assets/T0009L01-libp2p-logo.svg), but what if the server of this website is down? What if the DNS server is down? What if the image was converted to a PNG file and so the new location is `T0009L01-libp2p-logo.png`? What if you are in a country that has blocked the `proto.school` domain? All of these issues are common ones and are caused by location addressing, where we try to find the content we need by its location. -[IPFS](https://ipfs.io), however, approaches this problem in a different way by using [content addressing](/content-addressing/03) instead. If we know the [CID](/anatomy-of-a-cid) (Content IDentifier) of our libp2p logo instead of its location, we can simply ask the network who has the image with this CID. +[IPFS](https://ipfs.tech), however, approaches this problem in a different way by using [content addressing](/content-addressing/03) instead. If we know the [CID](/anatomy-of-a-cid) (Content IDentifier) of our libp2p logo instead of its location, we can simply ask the network who has the image with this CID. The advantages in this approach are very appealing since they solve all the other issues previously mentioned, but to get it right there are other problems that need to be tackled first, specifically within networking. ## Networks are complex diff --git a/src/tutorials/0009-introduction-to-libp2p/06.md b/src/tutorials/0009-introduction-to-libp2p/06.md index cb75e33cb..a6d4d2b2e 100644 --- a/src/tutorials/0009-introduction-to-libp2p/06.md +++ b/src/tutorials/0009-introduction-to-libp2p/06.md @@ -7,7 +7,7 @@ There are a lot of services using libp2p at the moment, for applications includi