From 27353db5d27f51535b1fc6280aa9b03deb9e2f08 Mon Sep 17 00:00:00 2001
From: PatrickAlphac <54278053+PatrickAlphaC@users.noreply.github.com>
Date: Fri, 20 May 2022 17:57:46 -0400
Subject: [PATCH] updated for github issue template
---
.github/ISSUE_TEMPLATE/code_mistake.yml | 56 ++
.github/ISSUE_TEMPLATE/config.yml | 5 +
.github/ISSUE_TEMPLATE/repo_enhancement.yml | 10 +
.github/ISSUE_TEMPLATE/video_mistake.yml | 47 ++
README.md | 780 ++++++++++++--------
5 files changed, 582 insertions(+), 316 deletions(-)
create mode 100644 .github/ISSUE_TEMPLATE/code_mistake.yml
create mode 100644 .github/ISSUE_TEMPLATE/config.yml
create mode 100644 .github/ISSUE_TEMPLATE/repo_enhancement.yml
create mode 100644 .github/ISSUE_TEMPLATE/video_mistake.yml
diff --git a/.github/ISSUE_TEMPLATE/code_mistake.yml b/.github/ISSUE_TEMPLATE/code_mistake.yml
new file mode 100644
index 0000000..ea199b2
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/code_mistake.yml
@@ -0,0 +1,56 @@
+name: Code Mistake
+description: File an issue with one of the code repositories.
+labels: ["code-bug"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Please ensure that the bug has not already been filed in the issue tracker.
+
+ Thanks for taking the time to report this bug!
+ - type: dropdown
+ attributes:
+ label: Component
+ description: Which lesson is this an issue for?
+ multiple: false
+ options:
+ - Lesson 1
+ - Lesson 2
+ - Lesson 3
+ - Lesson 4
+ - Lesson 5
+ - Lesson 6
+ - Lesson 7
+ - Lesson 8
+ - Lesson 9
+ - Lesson 10
+ - Lesson 11
+ - Lesson 12
+ - Lesson 13
+ - Lesson 14
+ - Lesson 15
+ - Lesson 16
+ - Lesson 17
+ - Lesson 18
+ - Other (please describe)
+ validations:
+ required: true
+ - type: input
+ attributes:
+ label: Could you please leave a link to the timestamp in the video where this error occurs? (You can right click a video and "copy video URL at current time")
+ placeholder: "https://www.youtube.com/watch?v=M576WGiDBdQ&t=21247s"
+ - type: dropdown
+ attributes:
+ label: Operating System
+ description: What operating system are you on?
+ options:
+ - Windows
+ - macOS (Intel)
+ - macOS (Apple Silicon)
+ - Linux
+ - type: textarea
+ attributes:
+ label: Describe the bug
+ description: Please include relevant code snippets as well if relevant. Remember to format!
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..1791faa
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: true
+contact_links:
+ - name: Anything Else
+ url: https://github.com/smartcontractkit/full-blockchain-solidity-course-js/discussions
+ about: For anything else that is a question about the course, looking to show off something cool, connect with other developers, or looking for support, please head over to the discussions tab!
diff --git a/.github/ISSUE_TEMPLATE/repo_enhancement.yml b/.github/ISSUE_TEMPLATE/repo_enhancement.yml
new file mode 100644
index 0000000..9e99542
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/repo_enhancement.yml
@@ -0,0 +1,10 @@
+name: Repo Enhancement
+description: If you have a suggestion on how to make this repository better, please let us know!
+labels: ["repo-enhancement"]
+body:
+ - type: textarea
+ attributes:
+ label: Describe the enhancement
+ description: The more information the better! Thanks for making this issue!
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/video_mistake.yml b/.github/ISSUE_TEMPLATE/video_mistake.yml
new file mode 100644
index 0000000..f56f13b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/video_mistake.yml
@@ -0,0 +1,47 @@
+name: Video Mistake
+description: File an issue when Patrick made a mistake in the video.
+labels: ["video-bug"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Please ensure that the bug has not already been filed in the issue tracker.
+
+ Thanks for taking the time to report this bug!
+ - type: dropdown
+ attributes:
+ label: Component
+ description: Which lesson is this an issue for?
+ multiple: false
+ options:
+ - Lesson 1
+ - Lesson 2
+ - Lesson 3
+ - Lesson 4
+ - Lesson 5
+ - Lesson 6
+ - Lesson 7
+ - Lesson 8
+ - Lesson 9
+ - Lesson 10
+ - Lesson 11
+ - Lesson 12
+ - Lesson 13
+ - Lesson 14
+ - Lesson 15
+ - Lesson 16
+ - Lesson 17
+ - Lesson 18
+ - Other (please describe)
+ validations:
+ required: true
+ - type: input
+ attributes:
+ label: Could you please leave a link to the timestamp in the video where this error occurs? (You can right click a video and "copy video URL at current time")
+ placeholder: "https://www.youtube.com/watch?v=M576WGiDBdQ&t=21247s"
+ - type: textarea
+ attributes:
+ label: Describe the bug
+ description: Please include relevant code snippets as well if relevant. Remember to format!
+ validations:
+ required: true
diff --git a/README.md b/README.md
index 991bb99..a5383eb 100644
--- a/README.md
+++ b/README.md
@@ -35,10 +35,17 @@ Backup Faucet: https://rinkebyfaucet.com/
# Table of Contents
-- [Testnet Faucets](#testnet-faucets)
-- [Resources For This Course](#resources-for-this-course)
- - [Questions](#questions)
-- [Table of Contents](#table-of-contents)
+
+Resources
+
+- Testnet Faucets
+- Resources For This Course
+
+- Table of Contents
+
+
Lesson 0: The Edge of the Rabbit Hole
@@ -52,313 +59,458 @@ Backup Faucet: https://rinkebyfaucet.com/
Lesson 1: Blockchain Basics
-
- -
- What is a Blockchain? What does a blockchain do?
-
-
+
+-
+What is a Blockchain? What does a blockchain do?
+
+- The Purpose Of Smart Contracts
+- Other Blockchain Benefits
+- What have Smart Contracts done so far?
+- Making Your First Transaction
+- Gas I: Introduction to Gas
+- How Do Blockchains Work?
+- Signing Transactions
+- Gas II
+- High-Level Blockchain Fundamentals
+
- - [The Purpose Of Smart Contracts](#the-purpose-of-smart-contracts)
- - [Other Blockchain Benefits](#other-blockchain-benefits)
- - [What have Smart Contracts done so far?](#what-have-smart-contracts-done-so-far)
- - [Making Your First Transaction](#making-your-first-transaction)
- - [Gas I: Introduction to Gas](#gas-i-introduction-to-gas)
- - [How Do Blockchains Work?](#how-do-blockchains-work)
- - [Signing Transactions](#signing-transactions)
- - [Gas II](#gas-ii)
- - [High-Level Blockchain Fundamentals](#high-level-blockchain-fundamentals)
-- [Lesson 2: Welcome to Remix! Simple Storage](#lesson-2-welcome-to-remix-simple-storage)
- - [Introduction](#introduction)
- - [Setting Up Your First Contract](#setting-up-your-first-contract)
- - [Basic Solidity: Types](#basic-solidity-types)
- - [Basic Solidity: Functions](#basic-solidity-functions)
- - [Basic Solidity: Arrays & Structs](#basic-solidity-arrays--structs)
- - [Basic Solidity: Compiler Errors and Warnings](#basic-solidity-compiler-errors-and-warnings)
- - [Memory, Storage, Calldata (Intro)](#memory-storage-calldata-intro)
- - [Mappings](#mappings)
- - [Deploying your First Contract](#deploying-your-first-contract)
- - [The EVM & A Recap of Lesson 2](#the-evm--a-recap-of-lesson-2)
-- [Lesson 3: Remix Storage Factory](#lesson-3-remix-storage-factory)
- - [Introduction](#introduction-1)
- - [Basic Solidity: Importing Contracts into other Contracts](#basic-solidity-importing-contracts-into-other-contracts)
- - [Basic Solidity: Interacting with other Contracts](#basic-solidity-interacting-with-other-contracts)
- - [Basic Solidity: Inheritance & Overrides](#basic-solidity-inheritance--overrides)
- - [Lesson 3 Recap](#lesson-3-recap)
-- [Lesson 4: Remix Fund Me](#lesson-4-remix-fund-me)
- - [Introduction](#introduction-2)
- - [Sending ETH Through a Function & Reverts](#sending-eth-through-a-function--reverts)
- - [Chainlink & Oracles](#chainlink--oracles)
- - [Review of Sending ETH and working with Chainlink](#review-of-sending-eth-and-working-with-chainlink)
- - [Interfaces & Price Feeds](#interfaces--price-feeds)
- - [Importing from GitHub & NPM](#importing-from-github--npm)
- - [Floating Point Math in Solidtiy](#floating-point-math-in-solidtiy)
- - [Basic Solidity: Arrays & Structs II](#basic-solidity-arrays--structs-ii)
- - [Review of Interfacs, Importing from GitHub, & Math in Solidity](#review-of-interfacs-importing-from-github--math-in-solidity)
- - [Libraries](#libraries)
- - [SafeMath, Overflow Checking, and the "unchecked" keywork](#safemath-overflow-checking-and-the-unchecked-keywork)
- - [Basic Solidity: For Loop](#basic-solidity-for-loop)
- - [Basic Solidity: Resetting an Array](#basic-solidity-resetting-an-array)
- - [Sending ETH from a Contract](#sending-eth-from-a-contract)
- - [Basic Solidity: Constructor](#basic-solidity-constructor)
- - [Basic Solidity: Modifiers](#basic-solidity-modifiers)
- - [Testnet Demo](#testnet-demo)
- - [Advanced Solidity](#advanced-solidity)
- - [Immutable & Constant](#immutable--constant)
- - [Custom Errors](#custom-errors)
- - [Receive & Fallback Functions](#receive--fallback-functions)
- - [Lesson 4 Recap](#lesson-4-recap)
-- [Lesson 5: Ethers.js Simple Storage](#lesson-5-ethersjs-simple-storage)
- - [Effective Debugging Strategies & Getting Help](#effective-debugging-strategies--getting-help)
- - [How to Debug Anything Video](#how-to-debug-anything-video)
- - [Installation & Setup](#installation--setup)
- - [Mac & Linux Setup](#mac--linux-setup)
- - [Windows Setup](#windows-setup)
- - [Gitpod](#gitpod)
- - [Local Development Introduction](#local-development-introduction)
- - [Optional Javascript Crash Courses](#optional-javascript-crash-courses)
- - [Tiny Javascript Refresher](#tiny-javascript-refresher)
- - [Asynchronous Programming in Javascript](#asynchronous-programming-in-javascript)
- - [Compiling our Solidity](#compiling-our-solidity)
- - [Ganache & Networks](#ganache--networks)
- - [Introduction to Ethers.js](#introduction-to-ethersjs)
- - [A Note on the await Keyword](#a-note-on-the-await-keyword)
- - [Adding Transaction Overrides](#adding-transaction-overrides)
- - [Transaction Receipts](#transaction-receipts)
- - [Sending a "raw" Transaction in Ethersjs](#sending-a-raw-transaction-in-ethersjs)
- - [Interacting with Contracts in Ethersjs](#interacting-with-contracts-in-ethersjs)
- - [Environment Variables](#environment-variables)
- - [Better Private Key Management](#better-private-key-management)
- - [Optional Prettier Formatting](#optional-prettier-formatting)
- - [Deploying to a Testnet or a Mainnet](#deploying-to-a-testnet-or-a-mainnet)
- - [Verifying on Block Explorers from the UI](#verifying-on-block-explorers-from-the-ui)
- - [Alchemy Dashboard & The Mempool](#alchemy-dashboard--the-mempool)
- - [Lesson 5 Recap](#lesson-5-recap)
- - [Typescript Ethers Simple Storage](#typescript-ethers-simple-storage)
-- [Lesson 6: Hardhat Simple Storage](#lesson-6-hardhat-simple-storage)
- - [Introduction](#introduction-3)
- - [Hardhat Setup](#hardhat-setup)
- - [Troubleshooting Hardaht Setup](#troubleshooting-hardaht-setup)
- - [Hardhat Setup Continued](#hardhat-setup-continued)
- - [Deploying SimpleStorage from Hardhat](#deploying-simplestorage-from-hardhat)
- - [Networks in Hardhat](#networks-in-hardhat)
- - [Programatic Verification](#programatic-verification)
- - [Interacting with Contracts in Hardhat](#interacting-with-contracts-in-hardhat)
- - [Artifacts Troubleshooting](#artifacts-troubleshooting)
- - [Custom Hardhat Tasks](#custom-hardhat-tasks)
- - [Hardhat Localhost Node](#hardhat-localhost-node)
- - [The Hardhat Console](#the-hardhat-console)
- - [Hardhat Tests](#hardhat-tests)
- - [Hardhat Gas Reporter](#hardhat-gas-reporter)
- - [Solidity Coverage](#solidity-coverage)
- - [Hardhat Waffle](#hardhat-waffle)
- - [Lesson 6 Recap](#lesson-6-recap)
- - [Typescript Hardhat Simple Storage](#typescript-hardhat-simple-storage)
-- [Lesson 7: Hardhat Fund Me](#lesson-7-hardhat-fund-me)
- - [Introduction](#introduction-4)
- - [Hardhat Setup - Fund Me](#hardhat-setup---fund-me)
- - [Linting](#linting)
- - [Hardhat Setup - Fund Me - Continued](#hardhat-setup---fund-me---continued)
- - [Importing from NPM](#importing-from-npm)
- - [Hardhat Deploy](#hardhat-deploy)
- - [Mocking](#mocking)
- - [Utils Folder](#utils-folder)
- - [Testnet Demo - Hardhat Fund Me](#testnet-demo---hardhat-fund-me)
- - [Solidity Style Guide](#solidity-style-guide)
- - [Testing Fund Me](#testing-fund-me)
- - [Breakpoints & Debugging](#breakpoints--debugging)
- - [Gas III:](#gas-iii)
- - [console.log & Debugging](#consolelog--debugging)
- - [Testing Fund Me II](#testing-fund-me-ii)
- - [Storage in Solidity](#storage-in-solidity)
- - [Gas Optimizations using Storage Knowledge](#gas-optimizations-using-storage-knowledge)
- - [Solidity Chainlink Style Guide](#solidity-chainlink-style-guide)
- - [Storage Review](#storage-review)
- - [Staging Tests](#staging-tests)
- - [Running Scripts on a Local Node](#running-scripts-on-a-local-node)
- - [Adding Scripts to your package.json](#adding-scripts-to-your-packagejson)
- - [Pushing to GitHub](#pushing-to-github)
- - [πΈπ¦ Tweet Me (add your repo in)!](#-tweet-me-add-your-repo-in)
-- [Lesson 8: HTML / Javascript Fund Me (Full Stack / Front End)](#lesson-8-html--javascript-fund-me-full-stack--front-end)
- - [Introduction](#introduction-5)
- - [How Websites work with Web3 Wallets](#how-websites-work-with-web3-wallets)
- - [HTML Setup](#html-setup)
- - [Connecting HTML to Metamask](#connecting-html-to-metamask)
- - [Javascript in it's own file](#javascript-in-its-own-file)
- - [ES6 vs Nodejs](#es6-vs-nodejs)
- - [Sending a transaction from a Website](#sending-a-transaction-from-a-website)
- - [Resetting an Account in Metamask](#resetting-an-account-in-metamask)
- - [Listening for Events and Completed Transactions](#listening-for-events-and-completed-transactions)
- - [Input Forms](#input-forms)
- - [Reading from the Blockchain](#reading-from-the-blockchain)
- - [Withdraw Function](#withdraw-function)
- - [Lesson 8 Recap](#lesson-8-recap)
- - [Optional Links:](#optional-links)
-- [Lesson 9: Hardhat Smart Contract Lottery](#lesson-9-hardhat-smart-contract-lottery)
- - [Introduction](#introduction-6)
- - [Hardhat Setup - Smart Contract Lottery](#hardhat-setup---smart-contract-lottery)
- - [Raffle.sol Setup](#rafflesol-setup)
- - [Introduction to Events](#introduction-to-events)
- - [Events in Raffle.sol](#events-in-rafflesol)
- - [Introduction to Chainlink VRF](#introduction-to-chainlink-vrf)
- - [Sub-Lesson: Chainlink VRF](#sub-lesson-chainlink-vrf)
- - [Implementing Chainlink VRF - Introduction](#implementing-chainlink-vrf---introduction)
- - [Hardhat Shorthand](#hardhat-shorthand)
- - [Implementing Chainlink VRF - The Request](#implementing-chainlink-vrf---the-request)
- - [Implementing Chainlink VRF - The FulFill](#implementing-chainlink-vrf---the-fulfill)
- - [Modulo](#modulo)
- - [Introduction to Chainlink Keepers](#introduction-to-chainlink-keepers)
- - [Implementing Chainlink Keepers - checkUpkeep](#implementing-chainlink-keepers---checkupkeep)
- - [Enums](#enums)
- - [Implementing Chainlink Keepers - checkUpkeep continued](#implementing-chainlink-keepers---checkupkeep-continued)
- - [Implementing Chainlink Keepers - performUpkeep](#implementing-chainlink-keepers---performupkeep)
- - [Code Cleanup](#code-cleanup)
- - [Deploying Raffle.sol](#deploying-rafflesol)
- - [Mock Chainlink VRF Coordinator](#mock-chainlink-vrf-coordinator)
- - [Continued](#continued)
- - [Raffle.sol Unit Tests](#rafflesol-unit-tests)
- - [Testing Events & Chai Matchers](#testing-events--chai-matchers)
- - [Continued I](#continued-i)
- - [Hardhat Methods & Time Travel](#hardhat-methods--time-travel)
- - [Continued II](#continued-ii)
- - [Callstatic](#callstatic)
- - [Continued III](#continued-iii)
- - [Massive Promise Test](#massive-promise-test)
- - [Continued IV](#continued-iv)
- - [Raffle.sol Staging Tests](#rafflesol-staging-tests)
- - [Testing on a Testnet](#testing-on-a-testnet)
- - [Recommended LINK amounts for Rinkeby Staging Test:](#recommended-link-amounts-for-rinkeby-staging-test)
- - [Conclusion](#conclusion)
- - [Typescript - Smart Contract Lottery](#typescript---smart-contract-lottery)
-- [Lesson 10: NextJS Smart Contract Lottery (Full Stack / Front End)](#lesson-10-nextjs-smart-contract-lottery-full-stack--front-end)
- - [Introduction](#introduction-7)
- - [Optional Sub-Lesson: Full Stack Development & Other Libraries](#optional-sub-lesson-full-stack-development--other-libraries)
- - [NextJS Setup](#nextjs-setup)
- - [Manual Header I](#manual-header-i)
- - [React Hooks](#react-hooks)
- - [Manual Header II](#manual-header-ii)
- - [useEffect Hook](#useeffect-hook)
- - [Local Storage](#local-storage)
- - [isWeb3EnabledLoading](#isweb3enabledloading)
- - [web3uikit](#web3uikit)
- - [Introduction to Calling Functions in Nextjs](#introduction-to-calling-functions-in-nextjs)
- - [Automatic Constant Value UI Updater](#automatic-constant-value-ui-updater)
- - [runContractFunction](#runcontractfunction)
- - [useState](#usestate)
- - [Calling Functions in NextJS](#calling-functions-in-nextjs)
- - [useNotification](#usenotification)
- - [Reading & Displaying Contract Data](#reading--displaying-contract-data)
- - [A Note about `onSuccess`](#a-note-about-onsuccess)
- - [A Challenge to You](#a-challenge-to-you)
- - [Tailwind & Styling](#tailwind--styling)
- - [Introduction to Hosting your Site](#introduction-to-hosting-your-site)
- - [IPFS](#ipfs)
- - [Hosting on IPFS](#hosting-on-ipfs)
- - [Hosting on IPFS & Filecoin using Fleek](#hosting-on-ipfs--filecoin-using-fleek)
- - [Filecoin Overview](#filecoin-overview)
- - [Lesson 10 Recap](#lesson-10-recap)
-- [Lesson 11: Hardhat Starter Kit](#lesson-11-hardhat-starter-kit)
-- [Lesson 12: Hardhat ERC20s](#lesson-12-hardhat-erc20s)
- - [What is an ERC? What is an EIP?](#what-is-an-erc-what-is-an-eip)
- - [What is an ERC20?](#what-is-an-erc20)
- - [Manually Creating an ERC20 Token](#manually-creating-an-erc20-token)
- - [Creating an ERC20 Token with Openzeppelin](#creating-an-erc20-token-with-openzeppelin)
- - [Lesson 12 Recap](#lesson-12-recap)
-- [Lesson 13: Hardhat DeFi & Aave](#lesson-13-hardhat-defi--aave)
- - [What is DeFi?](#what-is-defi)
- - [What is Aave?](#what-is-aave)
- - [Programatic Borrowing & Lending](#programatic-borrowing--lending)
- - [WETH - Wrapped ETH](#weth---wrapped-eth)
- - [Forking Mainnet](#forking-mainnet)
- - [Depositing into Aave](#depositing-into-aave)
- - [Borrowing from Aave](#borrowing-from-aave)
- - [Repaying with Aave](#repaying-with-aave)
- - [Visualizing the Transactions](#visualizing-the-transactions)
- - [Lesson 13 Recap](#lesson-13-recap)
- - [Happy Bow-Tie Friday with Austin Griffith](#happy-bow-tie-friday-with-austin-griffith)
- - [More DeFi Learnings:](#more-defi-learnings)
-- [Lesson 14: Hardhat NFTs (EVERYTHING you need to know about NFTs)](#lesson-14-hardhat-nfts-everything-you-need-to-know-about-nfts)
- - [What is an NFT?](#what-is-an-nft)
- - [Code Overview](#code-overview)
- - [Hardhat Setup](#hardhat-setup-1)
- - [Basic NFT](#basic-nft)
- - [Write Tests](#write-tests)
- - [Random IPFS NFT](#random-ipfs-nft)
- - [Mapping Chainlink VRF Requests](#mapping-chainlink-vrf-requests)
- - [Creating Rare NFTs](#creating-rare-nfts)
- - [Setting the NFT Image](#setting-the-nft-image)
- - [Setting an NFT Mint Price](#setting-an-nft-mint-price)
- - [Deploy Script](#deploy-script)
- - [Uploading Token Images with Pinata](#uploading-token-images-with-pinata)
- - [Uploading Token URIs (metadata) with Pinata](#uploading-token-uris-metadata-with-pinata)
- - [Deploying](#deploying)
- - [Tests](#tests)
- - [Dynamic SVG On-Chain NFT](#dynamic-svg-on-chain-nft)
- - [What is an SVG?](#what-is-an-svg)
- - [Initial Code](#initial-code)
- - [Base64 Encoding](#base64-encoding)
- - [Advanced: EVM Opcodes, Encoding, and Calling](#advanced-evm-opcodes-encoding-and-calling)
- - [abi.encode & abi.encodePacked](#abiencode--abiencodepacked)
- - [Introduction to Encoding Function Calls Directly](#introduction-to-encoding-function-calls-directly)
- - [Introduction to Encoding Function Calls Recap](#introduction-to-encoding-function-calls-recap)
- - [Encoding Function Calls Directly](#encoding-function-calls-directly)
- - [Creating an NFT TokenURI on-Chain](#creating-an-nft-tokenuri-on-chain)
- - [Making the NFT Dynamic](#making-the-nft-dynamic)
- - [Deploy Script](#deploy-script-1)
- - [Deploying the NFTs to a Testnet](#deploying-the-nfts-to-a-testnet)
- - [Lesson 14 Recap](#lesson-14-recap)
-- [Lesson 15: NextJS NFT Marketplace (If you finish this lesson, you are a full-stack MONSTER!)](#lesson-15-nextjs-nft-marketplace-if-you-finish-this-lesson-you-are-a-full-stack-monster)
- - [Introduction](#introduction-8)
- - [Part I: NFT Marketplace Contracts](#part-i-nft-marketplace-contracts)
- - [Hardhat Setup](#hardhat-setup-2)
- - [NftMarketplace.sol](#nftmarketplacesol)
- - [Reentrancy](#reentrancy)
- - [NftMarketplace.sol - Continued](#nftmarketplacesol---continued)
- - [NftMarketplace.sol - Deploy Script](#nftmarketplacesol---deploy-script)
- - [NftMarketplace.sol - Tests](#nftmarketplacesol---tests)
- - [NftMarketplace.sol - Scripts](#nftmarketplacesol---scripts)
- - [Part II: Moralis Front End](#part-ii-moralis-front-end)
- - [What is Moralis?](#what-is-moralis)
- - [NextJS Setup](#nextjs-setup-1)
- - [Adding Tailwind](#adding-tailwind)
- - [Introduction to Indexing in Web3](#introduction-to-indexing-in-web3)
- - [Connecting Moralis to our Local Hardhat Node](#connecting-moralis-to-our-local-hardhat-node)
- - [Moralis Event Sync](#moralis-event-sync)
- - [Reset Local Chain](#reset-local-chain)
- - [Moralis Cloud Functions](#moralis-cloud-functions)
- - [Practice Resetting the Local Chain](#practice-resetting-the-local-chain)
- - [Moralis Cloud Functions II](#moralis-cloud-functions-ii)
- - [Querying the Moralis Database](#querying-the-moralis-database)
- - [Rendering the NFT Images](#rendering-the-nft-images)
- - [Update Listing Modal](#update-listing-modal)
- - [Buy NFT Listing](#buy-nft-listing)
- - [Listing NFTs for Sale](#listing-nfts-for-sale)
- - [Part III: TheGraph Front End](#part-iii-thegraph-front-end)
- - [Introduction](#introduction-9)
- - [What is The Graph?](#what-is-the-graph)
- - [Building a Subgraph](#building-a-subgraph)
- - [Deploying our Subgraph](#deploying-our-subgraph)
- - [Reading from The Graph](#reading-from-the-graph)
- - [Hosting our Dapp](#hosting-our-dapp)
-- [Lesson 16: Hardhat Upgrades](#lesson-16-hardhat-upgrades)
- - [Upgradeable Smart Contracts Overview](#upgradeable-smart-contracts-overview)
- - [Types of Upgrades](#types-of-upgrades)
- - [Delegatecall](#delegatecall)
- - [Small Proxy Example](#small-proxy-example)
- - [Transparent Upgradeable Smart Contract](#transparent-upgradeable-smart-contract)
-- [Lesson 17: Hardhat DAOs](#lesson-17-hardhat-daos)
- - [Introduction](#introduction-10)
- - [What is a DAO?](#what-is-a-dao)
- - [How to build a DAO](#how-to-build-a-dao)
-- [Lesson 18: Security & Auditing](#lesson-18-security--auditing)
- - [Introduction](#introduction-11)
- - [Slither](#slither)
- - [Fuzzing and Eth Security Toolbox](#fuzzing-and-eth-security-toolbox)
- - [Closing Thoughts](#closing-thoughts)
-- [Congratulations](#congratulations)
- - [Where do I go now?](#where-do-i-go-now)
- - [Learning More](#learning-more)
- - [Community](#community)
- - [Hackathons](#hackathons)
+
+Lesson 2: Welcome to Remix! Simple Storage
+
+- Introduction
+- Setting Up Your First Contract
+- Basic Solidity: Types
+- Basic Solidity: Functions
+- Basic Solidity: Arrays & Structs
+- Basic Solidity: Compiler Errors and Warnings
+- Memory, Storage, Calldata (Intro)
+- Mappings
+- Deploying your First Contract
+- The EVM & A Recap of Lesson 2
+
+
+
+Lesson 3: Remix Storage Factory
+
+- Introduction
+- Basic Solidity: Importing Contracts into other Contracts
+- Basic Solidity: Interacting with other Contracts
+- Basic Solidity: Inheritance & Overrides
+- Lesson 3 Recap
+
+
+
+Lesson 4: Remix Fund Me
+
+- Introduction
+- Sending ETH Through a Function & Reverts
+- Chainlink & Oracles
+- Review of Sending ETH and working with Chainlink
+- Interfaces & Price Feeds
+- Importing from GitHub & NPM
+- Floating Point Math in Solidtiy
+- Basic Solidity: Arrays & Structs II
+- Review of Interfacs, Importing from GitHub, & Math in Solidity
+- Libraries
+- SafeMath, Overflow Checking, and the "unchecked" keywork
+- Basic Solidity: For Loop
+- Basic Solidity: Resetting an Array
+- Sending ETH from a Contract
+- Basic Solidity: Constructor
+- Basic Solidity: Modifiers
+- Testnet Demo
+- Advanced Solidity
+
+
+Lesson 5: Ethers.js Simple Storage
+
+- Effective Debugging Strategies & Getting Help
+
+- Installation & Setup
+
+- Local Development Introduction
+
+- Tiny Javascript Refresher
+- Asynchronous Programming in Javascript
+- Compiling our Solidity
+- Ganache & Networks
+- Introduction to Ethers.js
+
+- Adding Transaction Overrides
+- Transaction Receipts
+- Sending a "raw" Transaction in Ethersjs
+- Interacting with Contracts in Ethersjs
+- Environment Variables
+- Better Private Key Management
+- Optional Prettier Formatting
+- Deploying to a Testnet or a Mainnet
+- Verifying on Block Explorers from the UI
+- Alchemy Dashboard & The Mempool
+- Lesson 5 Recap
+
+
+
+
+Lesson 6: Hardhat Simple Storage
+
+- Introduction
+- Hardhat Setup
+
+- Hardhat Setup Continued
+- Deploying SimpleStorage from Hardhat
+- Networks in Hardhat
+- Programatic Verification
+- Interacting with Contracts in Hardhat
+- Artifacts Troubleshooting
+- Custom Hardhat Tasks
+- Hardhat Localhost Node
+- The Hardhat Console
+- Hardhat Tests
+- Hardhat Gas Reporter
+- Solidity Coverage
+- Hardhat Waffle
+- Lesson 6 Recap
+
+
+
+
+Lesson 7: Hardhat Fund Me
+
+- Introduction
+- Hardhat Setup - Fund Me
+- Linting
+- Hardhat Setup - Fund Me - Continued
+- Importing from NPM
+- Hardhat Deploy
+- Mocking
+- Utils Folder
+- Testnet Demo - Hardhat Fund Me
+- Solidity Style Guide
+- Testing Fund Me
+- Breakpoints & Debugging
+- Gas III:
+- console.log & Debugging
+- Testing Fund Me II
+- Storage in Solidity
+- Gas Optimizations using Storage Knowledge
+- Solidity Chainlink Style Guide
+- Storage Review
+- Staging Tests
+- Running Scripts on a Local Node
+- Adding Scripts to your package.json
+- Pushing to GitHub
+- πΈπ¦ Tweet Me (add your repo in)!
+
+
+
+Lesson 8: HTML / Javascript Fund Me (Full Stack / Front End)
+
+- Introduction
+- How Websites work with Web3 Wallets
+- HTML Setup
+- Connecting HTML to Metamask
+- Javascript in it's own file
+- ES6 vs Nodejs
+- Sending a transaction from a Website
+- Resetting an Account in Metamask
+- Listening for Events and Completed Transactions
+- Input Forms
+- Reading from the Blockchain
+- Withdraw Function
+- Lesson 8 Recap
+
+
+
+
+Lesson 9: Hardhat Smart Contract Lottery
+
+- Introduction
+- Hardhat Setup - Smart Contract Lottery
+- Raffle.sol Setup
+- Introduction to Events
+- Events in Raffle.sol
+- Introduction to Chainlink VRF
+
+- Implementing Chainlink VRF - Introduction
+
+- Implementing Chainlink VRF - The Request
+- Implementing Chainlink VRF - The FulFill
+
+- Introduction to Chainlink Keepers
+- Implementing Chainlink Keepers - checkUpkeep
+
+- Implementing Chainlink Keepers - checkUpkeep continued
+- Implementing Chainlink Keepers - performUpkeep
+- Code Cleanup
+- Deploying Raffle.sol
+
+- Raffle.sol Unit Tests
+
+- Hardhat Methods & Time Travel
+
+- Callstatic
+
+- Raffle.sol Staging Tests
+- Testing on a Testnet
+
+- Conclusion
+- Typescript - Smart Contract Lottery
+
+
+
+Lesson 10: NextJS Smart Contract Lottery (Full Stack / Front End)
+
+- Introduction
+
+- NextJS Setup
+- Manual Header I
+
+- Manual Header II
+- useEffect Hook
+- Local Storage
+- isWeb3EnabledLoading
+- web3uikit
+- Introduction to Calling Functions in Nextjs
+
+- useState
+- Calling Functions in NextJS
+- useNotification
+- Reading & Displaying Contract Data
+- A Note about
onSuccess
+- A Challenge to You
+- Tailwind & Styling
+- Introduction to Hosting your Site
+- IPFS
+- Hosting on IPFS
+- Hosting on IPFS & Filecoin using Fleek
+- Filecoin Overview
+- Lesson 10 Recap
+
+
+
+Lesson 11: Hardhat Starter Kit
+
+
+
+Lesson 12: Hardhat ERC20s
+
+- What is an ERC? What is an EIP?
+- What is an ERC20?
+- Manually Creating an ERC20 Token
+- Creating an ERC20 Token with Openzeppelin
+- Lesson 12 Recap
+
+
+
+
+Lesson 13: Hardhat DeFi & Aave
+
+- What is DeFi?
+- What is Aave?
+- Programatic Borrowing & Lending
+- WETH - Wrapped ETH
+- Forking Mainnet
+- Depositing into Aave
+- Borrowing from Aave
+- Repaying with Aave
+- Visualizing the Transactions
+- Lesson 13 Recap
+- Happy Bow-Tie Friday with Austin Griffith
+
+
+
+
+
+Lesson 14: Hardhat NFTs (EVERYTHING you need to know about NFTs)
+
+- What is an NFT?
+- Code Overview
+- Hardhat Setup
+- Basic NFT
+
+- Random IPFS NFT
+
+- Dynamic SVG On-Chain NFT
+
+- Advanced: EVM Opcodes, Encoding, and Calling
+
+- Deploying the NFTs to a Testnet
+- Lesson 14 Recap
+
+
+
+
+Lesson 15: NextJS NFT Marketplace (If you finish this lesson, you are a full-stack MONSTER!)
+
+- Introduction
+- Part I: NFT Marketplace Contracts
+
+- Reentrancy
+
+- Part II: Moralis Front End
+
+- Part III: TheGraph Front End
+
+
+
+
+
+Lesson 16: Hardhat Upgrades
+
+- Upgradeable Smart Contracts Overview
+- Types of Upgrades
+- Delegatecall
+- Small Proxy Example
+- Transparent Upgradeable Smart Contract
+
+
+
+
+Lesson 17: Hardhat DAOs
+
+- Introduction
+- What is a DAO?
+- How to build a DAO
+
+
+
+Lesson 18: Security & Auditing
+
+- Introduction
+- Slither
+- Fuzzing and Eth Security Toolbox
+- Closing Thoughts
+
+
+
+More Resources
+
+
+
+
@@ -372,14 +524,10 @@ Backup Faucet: https://rinkebyfaucet.com/
# Lesson 0: The Edge of the Rabbit Hole
-## Welcome to the course!
-*[0:00]()*
+## Welcome to the course!
+*Timestamp here*
## Best Practices
-*[4:24]()*
-
# Lesson 1: Blockchain Basics
-*[8:28]()*
-
## What is a Blockchain? What does a blockchain do?
- [Bitcoin Whitepaper](https://bitcoin.org/bitcoin.pdf)
- [Satoshi Nakamoto](https://en.wikipedia.org/wiki/Satoshi_Nakamoto)