Skip to content

Commit 9941583

Browse files
committed
Add final mini-quiz + give mini-quizzes meaningful titles + minor lesson text changes
1 parent a9d1e57 commit 9941583

File tree

12 files changed

+83
-58
lines changed

12 files changed

+83
-58
lines changed

pages/lessons/projects/2.mdx

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,34 @@ import DecentralizedStorage from '../fundamentals/decentralized-storage.mdx'
2020
import InstallNpm from '../fundamentals/install-npm.mdx'
2121
import TokenStandards from '../fundamentals/token-standards.mdx'
2222
import { LessonHeader } from '../../../components/mdx/LessonHeader'
23+
import CliLesson from '../fundamentals/cli_lesson.mdx'
2324

2425
<LessonHeader title="Lesson 2: Build a Basic NFT" />
2526

2627
## About this lesson
2728

2829
Welcome to this lesson on creating a series of NFTs using Solidity smart contracts with a range of developer tools. If you are new to programming, we recommend you first complete our *Getting Started with Smart Contract Development* project, where you can learn the basics of Solidity and the some of the concepts we use in this lesson. We alst have a series of follow-up projects to this one, the next one being *TierNFTs*, but let's not get ahead of ourselves just yet.
2930

30-
We have some checkpoint questions for you throughout the lesson for testing either your previous knowledge, predicting next steps in the lesson, or letting you see for yourself how well you're absorbing the new content. Needless to say, there's a quiz at the end, so make sure you're checking out all the side-drawers for a deeper dive of the new concepts. To complete the lesson, expect somewhere between one and six hours depending on your previous experience and the need to learn new ideas. Let's make developing enjoyable, by taking care of our well-being. We have a pomodoro timer ⌛ for you to set in the menu header so you can take regular breaks, and please *do* go outside and 'touch some grass'😊. Nature is the source of much of our well-being.
31+
We have some checkpoint questions for you throughout the lesson for testing either your previous knowledge, predicting next steps in the lesson, or letting you see for yourself how well you're absorbing the new content. Needless to say, there's a quiz at the end, so make sure you're checking out all the side-drawers for a deeper dive of the new concepts. To complete the lesson, expect somewhere between one and six hours depending on your previous experience and the need to learn new ideas. Let's make developing enjoyable, by taking care of our well-being. We have a pomodoro timer ⌛ for you to set in the menu header so you can take regular breaks, and please *do* go outside and 'touch some grass'. 😊 Nature is the source of much of our well-being 🌱
32+
3133

32-
PART 1 INTRO
3334
## What are we buidling?
3435

3536
In this project we will build a basic NFT smart contract, that will serve us as
3637
the backbone or foundation for almost any future NFT project.
3738

38-
<SideDrawer buttonText="Previous knowledge + prediction for parts 1 and 2" title="Build on your previous knowledge">
39+
But let's pause quickly for a few questions to see what you already know, and give you a flavour of what's to come.
40+
41+
<SideDrawer buttonText="Warm-up Questions" title="Some previous knowledge, some prediction">
3942
<Question question="lesson-2/1-intro/Q1" />
4043
<Question question="lesson-2/1-intro/Q2" />
4144
<Question question="lesson-2/1-intro/Q3" />
4245
<Question question="lesson-2/1-intro/Q4" />
4346
<Question question="lesson-2/1-intro/Q5" />
44-
</SideDrawer>
45-
<br/>
47+
</SideDrawer>
48+
How did you find that? No worries if the answers didn't come easily. We're here to fill
49+
in the gaps! Set your pomodoro ⌛😊
50+
4651

4752
![thatd.be.great.jpeg](/assets/lessons/2/img_1.jpeg)
4853

@@ -79,7 +84,7 @@ By the end of this lesson we'll have learnd a lot. A simple breakdown of the ste
7984
- *Mint*, i.e. create our very own NFT
8085
- See our NFT in a public marketplace
8186

82-
PART 2 TOOLS/ENVIRONMENT
87+
8388
## Set up your environment
8489

8590
Like the pros. For that we are going to set up our working environment in our
@@ -92,13 +97,14 @@ To begin our project, we should open a command line interface, a.k.a. console. C
9297
options on how to use one below. We will be using `npm`, the package manager from Node, and its command `npx`that allows us to run or execute a package or one of its scripts. If you are
9398
comfortable with another package manager, feel free to use it.
9499

95-
PLEASE HELP ME FIND CLI-LESSON PATH FOR SIDE-DRAWER COMPONENT:
96100
<SideDrawer title=" " buttonText="Getting Started with the Command Line Interface">
97-
<InstallNpm/>
101+
<CliLesson/>
98102
</SideDrawer>
103+
99104
<SideDrawer title=" " buttonText="How to install NPM on your system">
100105
<InstallNpm/>
101106
</SideDrawer>
107+
102108
Let’s create and `cd` into our D_D Academy projects folder, and create a
103109
folder for our NFT project:
104110

@@ -133,10 +139,7 @@ Once we have our environment set up, we need to create a project.
133139
We run the `npx hardhat` command to create a basic project:
134140

135141
<SideDrawer buttonText="What on Earth is Hardhat?">
136-
Since we’re flying to Jupiter, we need safety apparel! That’s what Hardhat is.
137-
138-
It provides a blockchain for us along the way, where we can have lots of value
139-
on it, and we can waste as much as we want and get hit on the head with
142+
Since we’re flying to Jupiter, we need safety apparel! And that’s what Hardhat is. It provides a blockchain for us along the way, where we can have lots of ETH in our wallet, and we can waste as much as we want, and get hit on the head with
140143
asteroids without getting any scars.
141144

142145
Hardhat lets us do all the things we did in Remix, but instead of clicking
@@ -229,7 +232,7 @@ widely used and fully tested and audited.
229232
</SideDrawer>
230233
<br/>
231234

232-
<SideDrawer buttonText="Assessment of part 1 and 2 and prediction of 3" title="Assessment of part 1 and 2 and prediction of 3">
235+
<SideDrawer buttonText="Checkpoint Questions" title="Creating a Robust Development Environment">
233236
<Question question="lesson-2/2-tools-environment/Q1" />
234237
<Question question="lesson-2/2-tools-environment/Q2" />
235238
<Question question="lesson-2/2-tools-environment/Q3" />
@@ -238,7 +241,7 @@ widely used and fully tested and audited.
238241
</SideDrawer>
239242
<br/>
240243

241-
PART 3 SOLIDITY/TOKEN STANDARDS
244+
242245
## Let’s start coding!
243246

244247
With our project folder ready, we can now fire up our Code Editor.
@@ -358,17 +361,16 @@ have been minted so far. In the next step we will use this variable to identify
358361
each new NFT that’s created.
359362

360363

361-
<SideDrawer buttonText="Assessment of part 3 and prediction of 4" title="Assessment of part 3 and prediction of 4">
364+
<SideDrawer buttonText="Checkpoint Questions" title="Solidity and Contracts in Context">
362365
<Question question="lesson-2/3-sol-erc/Q1" />
363366
<Question question="lesson-2/3-sol-erc/Q2" />
364367
<Question question="lesson-2/3-sol-erc/Q3" />
365368
<Question question="lesson-2/3-sol-erc/Q4" />
366369
<Question question="lesson-2/3-sol-erc/Q5" />
367370
</SideDrawer>
371+
Don't forget the pomodoro ⌛😊
368372
<br/>
369373

370-
PART 4. NFT IDENTITY
371-
372374
## Mint… Feels Good
373375

374376
Once we have a way to identify our NFTs, we only need a way to create them.
@@ -406,11 +408,11 @@ new item to be added to our ProjectNFT contract.
406408

407409
As you can see, OpenZeppelin implementation takes care of all the heavy lifting,
408410
but later in our learning journey we will be able to understand how it all works
409-
inside the hood.
411+
under the hood.
410412

411413
## Ok but, what does it do?
412414

413-
We can create unique NFTs by now, but we didn't add any media or utility to them
415+
We can create unique NFTs by now, but we haven't added any media or utility to them
414416
just yet.
415417

416418
![cmon.do.something.nft.jpeg](/assets/lessons/2/img_8.jpeg)
@@ -504,8 +506,7 @@ and files that we prepared, and move on to the next section.
504506
- If you want to create your own images and have an NFT of your own, why not take the winding road and learn a little about the standard used to identify NFTs
505507
and a solution to store files in a decentralized way.
506508

507-
PART 5 JSON/IPFS (SEPARATE SIDE DRAWER QUIZ)
508-
<SideDrawer buttonText="Assessment of part 4 and prediction of 6" title="Assessment of part 4 and prediction of 6">
509+
<SideDrawer buttonText="Checkpoint Questions" title="Creating NFT ID with the Power of Inheritence">
509510
<Question question="lesson-2/4-nft-id/Q1" />
510511
<Question question="lesson-2/4-nft-id/Q2" />
511512
<Question question="lesson-2/4-nft-id/Q3" />
@@ -516,6 +517,7 @@ PART 5 JSON/IPFS (SEPARATE SIDE DRAWER QUIZ)
516517

517518
<SideDrawer buttonText="Longer Path (learn about JSON and IPFS)">
518519
## JSON
520+
Go touch some grass, and set your pomodoro when you get back ⌛😊
519521

520522
We have most of our smart contract ready, so we are going to focus on the media
521523
that we want on our NFTs.
@@ -643,7 +645,7 @@ an IPFS service will surely help you get ahead in your learning.
643645

644646
Have your json files folder IPFS link saved (the full link, that links to all
645647
the files), for we will use it in our next step.
646-
<SideDrawer buttonText="Assessment of part 5 and prediction of 6" title="Assessment of part 5 and prediction of 6">
648+
<SideDrawer buttonText="Checkpoint Questions" title="Web3 File Storage and Good Practices">
647649
<Question question="lesson-2/5-sidedrawer-json-ipfs/Q1" />
648650
<Question question="lesson-2/5-sidedrawer-json-ipfs/Q2" />
649651
<Question question="lesson-2/5-sidedrawer-json-ipfs/Q3" />
@@ -656,7 +658,6 @@ Good for you for taking on this extra adventure 🧙🏾
656658
</SideDrawer>
657659

658660

659-
PART 6 SCRIPTS AND COMPILE
660661
## Deploy! Back to Solidity... kind of...
661662

662663
You might remember this from the previous project, when we used Remix. Once we
@@ -793,16 +794,15 @@ Let's run the script again and see what it tells us! Here's my output:
793794
We got the URI of the token, right? So, now we know we can deploy it, and mint
794795
to a real blockchain!
795796

796-
<SideDrawer buttonText="Assessment of part 6 and prediction of 7" title="Assessment of part 6 and prediction of 7">
797+
<SideDrawer buttonText="Checkpoint Questions" title="Testing our Configurations with Scripts">
797798
<Question question="lesson-2/6-scripts-compile/Q1" />
798799
<Question question="lesson-2/6-scripts-compile/Q2" />
799800
<Question question="lesson-2/6-scripts-compile/Q3" />
800801
<Question question="lesson-2/6-scripts-compile/Q4" />
801802
<Question question="lesson-2/6-scripts-compile/Q5" />
802803
</SideDrawer>
803804
<br/>
804-
805-
PART 7 DEPLOY. TESTNETS. WALLETS. OPENSEA
805+
Set your pomodoro ⌛😊
806806

807807
## Things just got real!
808808

@@ -849,8 +849,8 @@ they can take full control of the wallet, and empty it of all that is in it!
849849
To be able to deploy our contract, we are going to use that number, that's why
850850
we recommend, yet again, to use a separate wallet for developing.
851851

852-
We need to inform Hardhat what node are we using to connect to the
853-
blockchain/network
852+
We need to inform Hardhat which node we are using to connect to the
853+
blockchain/network.
854854

855855
Once you have your wallet funded with test eth, you need sign up for one of the
856856
Ethereum RPC Node Providers. Alchemy and Infura are the most used, Ankr has a "community endpoint" without signing up that is not dedicated, to list a few options.
@@ -905,7 +905,7 @@ Please, if you are already a developer and you plan to use git to store your
905905
project, don't store your `hardhat.config.js` on it, because you will have your
906906
private key there.
907907

908-
<SideDrawer buttonText="Assessment of part 7 and prediction of 8" title="Assessment of part 7 and prediction of 8">
908+
<SideDrawer buttonText="Checkpoint Questions" title="Adopting Wise Developer Practices">
909909
<Question question="lesson-2/7-connect-real-world/Q1" />
910910
<Question question="lesson-2/7-connect-real-world/Q2" />
911911
<Question question="lesson-2/7-connect-real-world/Q3" />
@@ -914,8 +914,6 @@ private key there.
914914
</SideDrawer>
915915
<br/>
916916

917-
PART 8 DEPLOY TO TESTNET
918-
919917
Ok. We are ready, let's deploy to the Goerli testnet!
920918

921919
Now we need to run our deploy.js script and the deployment is going to cost us

utils/questions/lesson-2/1-intro/Q3.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"question": "In Solidity, what does the ^ symbol represent when specifying the compiler version?",
33
"options": [
44
{
5-
"answer": "It denotes an exclusive range of compiler versions"
5+
"answer": "It denotes an exclusive compiler version"
66
},
77
{
88
"answer": "It indicates a fallback function"

utils/questions/lesson-2/3-sol-erc/Q3.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
"answer": "Defines the copyright license "
66
},
77
{
8-
"answer": "Declares the version of Solidity being used",
9-
"correct": true
8+
"answer": "Declares the version of Solidity being used"
109
},
1110
{
12-
"answer": "Assigns a name and symbol to the NFT being created"
11+
"answer": "Assigns a name and symbol to the NFT being created",
12+
"correct": true
1313
}
1414
]
1515
}

utils/questions/lesson-2/3-sol-erc/Q4.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"answer": "becoming more basic and focused on specific functionalities"
66
},
77
{
8-
"answer": "becoming less modular and harder to use"
8+
"answer": "becoming less modular"
99
},
1010
{
1111
"answer": "opening up more possibilities and become richer in functionality",

utils/questions/lesson-2/3-sol-erc/Q5.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
{
2-
"question": "",
2+
"question": "ETH is an ERC token",
33
"options": [
44
{
5-
"answer": ""
5+
"answer": "True"
66
},
77
{
8-
"answer": "",
8+
"answer": "False",
99
"correct": true
1010
}
1111
]

utils/questions/lesson-2/5-sidedrawer-json-ipfs/Q2.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
"answer": "To move files and pin them to another node"
66
},
77
{
8-
"answer": "To make content available more permanently"
8+
"answer": "To make content available more permanently",
9+
"correct": true
910
},
1011
{
11-
"answer": "To create a hole where a file once was therefore deleting it from the network",
12-
"correct": true
12+
"answer": "To create a hole where a file once was therefore deleting it from the network"
1313
}
1414
]
1515
}

utils/questions/lesson-2/6-scripts-compile/Q3.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"question": "Which info does our script print to the screen? Think about where you might utilise that info",
2+
"question": "Which info does our script print to the screen?",
33
"options": [
44
{
55
"answer": "The main function"
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
{
2-
"question": "",
2+
"question": "What precaution should you take regarding wallets for developing?",
33
"options": [
44
{
5-
"answer": ""
5+
"answer": "Avoid using wallets altogether during the development phase"
66
},
77
{
8-
"answer": "",
8+
"answer": "Share the private key of your wallet with trusted individuals"
9+
},
10+
{
11+
"answer": "Use a separate wallet for developing - independent from personal assets",
912
"correct": true
13+
},
14+
{
15+
"answer": "Use the same wallet that holds personal assets on Mainnet"
1016
}
1117
]
1218
}

utils/questions/lesson-2/7-connect-real-world/Q2.json

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
{
2-
"question": "",
2+
"question": "What is the most sensitive data of the project?",
33
"options": [
44
{
5-
"answer": ""
5+
"answer": "API key from an Ethereum RPC node provider"
66
},
77
{
8-
"answer": "",
8+
"answer": "Your score in the last mini-quiz"
9+
},
10+
{
11+
"answer": "Your Ethereum address"
12+
},
13+
{
14+
"answer": "Your wallet's private key",
915
"correct": true
1016
}
1117
]
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
{
2-
"question": "",
2+
"question": "Which of the following go into the hardhat.config.js file?",
33
"options": [
44
{
5-
"answer": ""
5+
"answer": "NFT_NAME"
66
},
77
{
8-
"answer": "",
8+
"answer": "RPC_API_KEY",
99
"correct": true
10+
},
11+
{
12+
"answer": "tokenURI"
13+
},
14+
{
15+
"answer": "NFT_BASE_URI"
1016
}
1117
]
1218
}

0 commit comments

Comments
 (0)