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 +
    +
  1. Testnet Faucets
  2. +
  3. Resources For This Course +
  4. +
  5. Table of Contents
  6. +
+
Lesson 0: The Edge of the Rabbit Hole
    @@ -52,313 +59,458 @@ Backup Faucet: https://rinkebyfaucet.com/
Lesson 1: Blockchain Basics -
    -
  1. - What is a Blockchain? What does a blockchain do? -
  2. -
+
    +
  1. +What is a Blockchain? What does a blockchain do? +
  2. +
  3. The Purpose Of Smart Contracts
  4. +
  5. Other Blockchain Benefits
  6. +
  7. What have Smart Contracts done so far?
  8. +
  9. Making Your First Transaction
  10. +
  11. Gas I: Introduction to Gas
  12. +
  13. How Do Blockchains Work?
  14. +
  15. Signing Transactions
  16. +
  17. Gas II
  18. +
  19. High-Level Blockchain Fundamentals
  20. +
- - [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 +
    +
  1. Introduction
  2. +
  3. Setting Up Your First Contract
  4. +
  5. Basic Solidity: Types
  6. +
  7. Basic Solidity: Functions
  8. +
  9. Basic Solidity: Arrays & Structs
  10. +
  11. Basic Solidity: Compiler Errors and Warnings
  12. +
  13. Memory, Storage, Calldata (Intro)
  14. +
  15. Mappings
  16. +
  17. Deploying your First Contract
  18. +
  19. The EVM & A Recap of Lesson 2
  20. +
+
+
+Lesson 3: Remix Storage Factory +
    +
  1. Introduction
  2. +
  3. Basic Solidity: Importing Contracts into other Contracts
  4. +
  5. Basic Solidity: Interacting with other Contracts
  6. +
  7. Basic Solidity: Inheritance & Overrides
  8. +
  9. Lesson 3 Recap
  10. +
+
+
+Lesson 4: Remix Fund Me +
    +
  1. Introduction
  2. +
  3. Sending ETH Through a Function & Reverts
  4. +
  5. Chainlink & Oracles
  6. +
  7. Review of Sending ETH and working with Chainlink
  8. +
  9. Interfaces & Price Feeds
  10. +
  11. Importing from GitHub & NPM
  12. +
  13. Floating Point Math in Solidtiy
  14. +
  15. Basic Solidity: Arrays & Structs II
  16. +
  17. Review of Interfacs, Importing from GitHub, & Math in Solidity
  18. +
  19. Libraries
  20. +
  21. SafeMath, Overflow Checking, and the "unchecked" keywork
  22. +
  23. Basic Solidity: For Loop
  24. +
  25. Basic Solidity: Resetting an Array
  26. +
  27. Sending ETH from a Contract
  28. +
  29. Basic Solidity: Constructor
  30. +
  31. Basic Solidity: Modifiers
  32. +
  33. Testnet Demo
  34. +
  35. Advanced Solidity
+
+
+Lesson 5: Ethers.js Simple Storage +
    +
  1. Effective Debugging Strategies & Getting Help +
  2. +
  3. Installation & Setup +
  4. +
  5. Local Development Introduction +
  6. +
  7. Tiny Javascript Refresher
  8. +
  9. Asynchronous Programming in Javascript
  10. +
  11. Compiling our Solidity
  12. +
  13. Ganache & Networks
  14. +
  15. Introduction to Ethers.js +
  16. +
  17. Adding Transaction Overrides
  18. +
  19. Transaction Receipts
  20. +
  21. Sending a "raw" Transaction in Ethersjs
  22. +
  23. Interacting with Contracts in Ethersjs
  24. +
  25. Environment Variables
  26. +
  27. Better Private Key Management
  28. +
  29. Optional Prettier Formatting
  30. +
  31. Deploying to a Testnet or a Mainnet
  32. +
  33. Verifying on Block Explorers from the UI
  34. +
  35. Alchemy Dashboard & The Mempool
  36. +
  37. Lesson 5 Recap +
  38. +
+
+
+Lesson 6: Hardhat Simple Storage +
    +
  1. Introduction
  2. +
  3. Hardhat Setup +
  4. +
  5. Hardhat Setup Continued
  6. +
  7. Deploying SimpleStorage from Hardhat
  8. +
  9. Networks in Hardhat
  10. +
  11. Programatic Verification
  12. +
  13. Interacting with Contracts in Hardhat
  14. +
  15. Artifacts Troubleshooting
  16. +
  17. Custom Hardhat Tasks
  18. +
  19. Hardhat Localhost Node
  20. +
  21. The Hardhat Console
  22. +
  23. Hardhat Tests
  24. +
  25. Hardhat Gas Reporter
  26. +
  27. Solidity Coverage
  28. +
  29. Hardhat Waffle
  30. +
  31. Lesson 6 Recap +
  32. +
+
+
+Lesson 7: Hardhat Fund Me +
    +
  1. Introduction
  2. +
  3. Hardhat Setup - Fund Me
  4. +
  5. Linting
  6. +
  7. Hardhat Setup - Fund Me - Continued
  8. +
  9. Importing from NPM
  10. +
  11. Hardhat Deploy
  12. +
  13. Mocking
  14. +
  15. Utils Folder
  16. +
  17. Testnet Demo - Hardhat Fund Me
  18. +
  19. Solidity Style Guide
  20. +
  21. Testing Fund Me
  22. +
  23. Breakpoints & Debugging
  24. +
  25. Gas III:
  26. +
  27. console.log & Debugging
  28. +
  29. Testing Fund Me II
  30. +
  31. Storage in Solidity
  32. +
  33. Gas Optimizations using Storage Knowledge
  34. +
  35. Solidity Chainlink Style Guide
  36. +
  37. Storage Review
  38. +
  39. Staging Tests
  40. +
  41. Running Scripts on a Local Node
  42. +
  43. Adding Scripts to your package.json
  44. +
  45. Pushing to GitHub
  46. +
  47. 🐸🐦 Tweet Me (add your repo in)!
  48. +
+
+
+Lesson 8: HTML / Javascript Fund Me (Full Stack / Front End) +
    +
  1. Introduction
  2. +
  3. How Websites work with Web3 Wallets
  4. +
  5. HTML Setup
  6. +
  7. Connecting HTML to Metamask
  8. +
  9. Javascript in it's own file
  10. +
  11. ES6 vs Nodejs
  12. +
  13. Sending a transaction from a Website
  14. +
  15. Resetting an Account in Metamask
  16. +
  17. Listening for Events and Completed Transactions
  18. +
  19. Input Forms
  20. +
  21. Reading from the Blockchain
  22. +
  23. Withdraw Function
  24. +
  25. Lesson 8 Recap +
  26. +
+
+
+Lesson 9: Hardhat Smart Contract Lottery +
    +
  1. Introduction
  2. +
  3. Hardhat Setup - Smart Contract Lottery
  4. +
  5. Raffle.sol Setup
  6. +
  7. Introduction to Events
  8. +
  9. Events in Raffle.sol
  10. +
  11. Introduction to Chainlink VRF +
  12. +
  13. Implementing Chainlink VRF - Introduction +
  14. +
  15. Implementing Chainlink VRF - The Request
  16. +
  17. Implementing Chainlink VRF - The FulFill +
  18. +
  19. Introduction to Chainlink Keepers
  20. +
  21. Implementing Chainlink Keepers - checkUpkeep +
  22. +
  23. Implementing Chainlink Keepers - checkUpkeep continued
  24. +
  25. Implementing Chainlink Keepers - performUpkeep
  26. +
  27. Code Cleanup
  28. +
  29. Deploying Raffle.sol +
  30. +
  31. Raffle.sol Unit Tests +
  32. +
  33. Hardhat Methods & Time Travel +
  34. +
  35. Callstatic +
  36. +
  37. Raffle.sol Staging Tests
  38. +
  39. Testing on a Testnet +
  40. +
  41. Conclusion
  42. +
  43. Typescript - Smart Contract Lottery
  44. +
+
+
+Lesson 10: NextJS Smart Contract Lottery (Full Stack / Front End) +
    +
  1. Introduction +
  2. +
  3. NextJS Setup
  4. +
  5. Manual Header I +
  6. +
  7. Manual Header II
  8. +
  9. useEffect Hook
  10. +
  11. Local Storage
  12. +
  13. isWeb3EnabledLoading
  14. +
  15. web3uikit
  16. +
  17. Introduction to Calling Functions in Nextjs +
  18. +
  19. useState
  20. +
  21. Calling Functions in NextJS
  22. +
  23. useNotification
  24. +
  25. Reading & Displaying Contract Data
  26. +
  27. A Note about onSuccess
  28. +
  29. A Challenge to You
  30. +
  31. Tailwind & Styling
  32. +
  33. Introduction to Hosting your Site
  34. +
  35. IPFS
  36. +
  37. Hosting on IPFS
  38. +
  39. Hosting on IPFS & Filecoin using Fleek
  40. +
  41. Filecoin Overview
  42. +
  43. Lesson 10 Recap
  44. +
+
+
+Lesson 11: Hardhat Starter Kit +
    +
+
+Lesson 12: Hardhat ERC20s +
    +
  1. What is an ERC? What is an EIP?
  2. +
  3. What is an ERC20?
  4. +
  5. Manually Creating an ERC20 Token
  6. +
  7. Creating an ERC20 Token with Openzeppelin
  8. +
  9. Lesson 12 Recap
  10. + +
+
+
+Lesson 13: Hardhat DeFi & Aave +
    +
  1. What is DeFi?
  2. +
  3. What is Aave?
  4. +
  5. Programatic Borrowing & Lending
  6. +
  7. WETH - Wrapped ETH
  8. +
  9. Forking Mainnet
  10. +
  11. Depositing into Aave
  12. +
  13. Borrowing from Aave
  14. +
  15. Repaying with Aave
  16. +
  17. Visualizing the Transactions
  18. +
  19. Lesson 13 Recap
  20. +
  21. Happy Bow-Tie Friday with Austin Griffith +
  22. + +
+
+
+Lesson 14: Hardhat NFTs (EVERYTHING you need to know about NFTs) +
    +
  1. What is an NFT?
  2. +
  3. Code Overview
  4. +
  5. Hardhat Setup
  6. +
  7. Basic NFT +
  8. +
  9. Random IPFS NFT +
  10. +
  11. Dynamic SVG On-Chain NFT +
  12. +
  13. Advanced: EVM Opcodes, Encoding, and Calling +
  14. +
  15. Deploying the NFTs to a Testnet
  16. +
  17. Lesson 14 Recap
  18. + +
+
+
+Lesson 15: NextJS NFT Marketplace (If you finish this lesson, you are a full-stack MONSTER!) +
    +
  1. Introduction
  2. +
  3. Part I: NFT Marketplace Contracts +
  4. +
  5. Reentrancy +
  6. +
  7. Part II: Moralis Front End +
  8. +
  9. Part III: TheGraph Front End +
  10. + +
+
+
+Lesson 16: Hardhat Upgrades +
    +
  1. Upgradeable Smart Contracts Overview
  2. +
  3. Types of Upgrades
  4. +
  5. Delegatecall
  6. +
  7. Small Proxy Example
  8. +
  9. Transparent Upgradeable Smart Contract
  10. + +
+
+
+Lesson 17: Hardhat DAOs +
    +
  1. Introduction
  2. +
  3. What is a DAO?
  4. +
  5. How to build a DAO
  6. +
+
+
+Lesson 18: Security & Auditing +
    +
  1. Introduction
  2. +
  3. Slither
  4. +
  5. Fuzzing and Eth Security Toolbox
  6. +
  7. Closing Thoughts
  8. +
+
+
+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)