[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-10472":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":10,"languages":10,"totalLinesOfCode":10,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":44,"readmeContent":45,"aiSummary":46,"trendingCount":15,"starSnapshotCount":15,"syncStatus":47,"lastSyncTime":48,"discoverSource":49},10472,"full-blockchain-solidity-course-js","smartcontractkit\u002Ffull-blockchain-solidity-course-js","smartcontractkit","Learn Blockchain, Solidity, and Full Stack Web3 Development with Javascript","",null,14010,3282,259,94,0,4,26,1,71.6,false,"main",true,[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"alchemy","blockchain","chainlink","dao","defi","eth-security-toolbox","ethereum","hardhat","ipfs","javascript","moralis","nextjs","nft","openzeppelin","reactjs","remix","smart-contracts","solidity","thegraphprotocol","typescript","2026-06-12 04:00:50","# Update: Head to Cyfrin Updraft\n\n> **ℹ️ Important:**\n> This repo is no longer actively maintained as there have been changes in Hardhat tooling. The video is out of sync with the code, and you can still follow along with the video, but you will likely need to troubleshoot the changes in the tooling and dependencies. Note also that best practices have evolved since this video was made.  \n> If you'd like to continue your training with more up-to-date material, you can take a look at [Cyfrin Updraft](https:\u002F\u002Fupdraft.cyfrin.io\u002F). That content is developed with love by Patrick & Cyfrin \u003C3. However note that Cyfrin Updraft training uses Foundry, not Hardhat, so there will be tooling changes involved.\n\n# Web3, Full Stack Solidity, Smart Contract & Blockchain - Beginner to Expert ULTIMATE Course | Javascript Edition\n\n\u003Cbr\u002F>\n\u003Cp align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ\" target=\"_blank\">\n\u003Cimg src=\".\u002Fimg\u002Fblockchain1.png\" width=\"500\" alt=\"Solidity, Blockchain, and Smart Contract Course – Beginner to Expert Javascript Tutorial\">\n\u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cbr\u002F>\n\nWelcome to the repository for the Ultimate Web3, Full Stack Solidity, and Smart Contract - Beginner to Expert Full Course | Javascript Edition FreeCodeCamp Course!\n\n# Link to video: https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ\n\nAll code references have both a javascript and a typescript edition.\n\nRecommended Testnet: Sepolia\n\n_We have updated the repos to work with Sepolia due to Rinkeby and Kovan being sunset, and Goerli being a disaster. Let us know if any of the changes break stuff!_\n\n# [Testnet Faucets](https:\u002F\u002Ffaucets.chain.link)\n\nMain Faucet:\u003Ca href=\"https:\u002F\u002Ffaucets.chain.link\" target=\"_blank\"> https:\u002F\u002Ffaucets.chain.link\u003C\u002Fa>\nBackup Faucet:\u003Ca href=\"https:\u002F\u002Fsepoliafaucet.com\u002F\" target=\"_blank\"> https:\u002F\u002Fsepoliafaucet.com\u002F\u003C\u002Fa>\n\n> ⚠️ All code associated with this course is for demo purposes only. They have not been audited and should not be considered production ready. Please use at your own risk.\n\n# Resources For This Course\n\n### Questions\n\n- [Github Discussions](https:\u002F\u002Fgithub.com\u002Fsmartcontractkit\u002Ffull-blockchain-solidity-course-js\u002Fdiscussions)\n  - Ask questions and chat about the course here!\n- [Stack Exchange Ethereum](https:\u002F\u002Fethereum.stackexchange.com\u002F)\n  - Great place for asking technical questions about Ethereum\n- [StackOverflow](https:\u002F\u002Fstackoverflow.com\u002F)\n  - Great place for asking technical questions overall\n\n# Table of Contents\n\n\u003Cdetails>\n\u003Csummary>Resources\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#testnet-faucets\">Testnet Faucets\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#resources-for-this-course\">Resources For This Course\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#questions\">Questions\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#table-of-contents\">Table of Contents\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary> \u003Ca href=\"#lesson-0-the-edge-of-the-rabbit-hole\">Lesson 0: The Edge of the Rabbit Hole\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n  \u003Cli>\n  \u003Ca href=\"#welcome-to-the-course\">Welcome to the course! \u003C\u002Fa>\n  \u003C\u002Fli>\n  \u003Cli>\n  \u003Ca href=\"#best-practices\">Best Practices \u003C\u002Fa>\n  \u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary> \u003Ca href=\"#lesson-1-blockchain-basics\"> Lesson 1: Blockchain Basics \u003C\u002Fa> \u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\n\u003Ca href=\"#what-is-a-blockchain-what-does-a-blockchain-do\">What is a Blockchain? What does a blockchain do?\u003C\u002Fa>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#the-purpose-of-smart-contracts\">The Purpose Of Smart Contracts\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#other-blockchain-benefits\">Other Blockchain Benefits\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#what-have-smart-contracts-done-so-far\">What have Smart Contracts done so far?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#making-your-first-transaction\">Making Your First Transaction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#gas-i-introduction-to-gas\">Gas I: Introduction to Gas\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#how-do-blockchains-work\">How Do Blockchains Work?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#signing-transactions\">Signing Transactions\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#gas-ii\">Gas II\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#high-level-blockchain-fundamentals\">High-Level Blockchain Fundamentals\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-2-welcome-to-remix-simple-storage\">Lesson 2: Welcome to Remix! Simple Storage\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#setting-up-your-first-contract\">Setting Up Your First Contract\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-types\">Basic Solidity: Types\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-functions\">Basic Solidity: Functions\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-arrays--structs\">Basic Solidity: Arrays &amp; Structs\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-compiler-errors-and-warnings\">Basic Solidity: Compiler Errors and Warnings\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#memory-storage-calldata-intro\">Memory, Storage, Calldata (Intro)\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#mappings\">Mappings\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#deploying-your-first-contract\">Deploying your First Contract\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#the-evm--a-recap-of-lesson-2\">The EVM &amp; A Recap of Lesson 2\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-3-remix-storage-factory\">Lesson 3: Remix Storage Factory\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction-1\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-importing-contracts-into-other-contracts\">Basic Solidity: Importing Contracts into other Contracts\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-interacting-with-other-contracts\">Basic Solidity: Interacting with other Contracts\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-inheritance--overrides\">Basic Solidity: Inheritance &amp; Overrides\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#lesson-3-recap\">Lesson 3 Recap\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-4-remix-fund-me\">Lesson 4: Remix Fund Me\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction-2\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#sending-eth-through-a-function--reverts\">Sending ETH Through a Function &amp; Reverts\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#chainlink--oracles\">Chainlink &amp; Oracles\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#review-of-sending-eth-and-working-with-chainlink\">Review of Sending ETH and working with Chainlink\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#interfaces--price-feeds\">Interfaces &amp; Price Feeds\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#importing-from-github--npm\">Importing from GitHub &amp; NPM\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#floating-point-math-in-solidtiy\">Floating Point Math in Solidity\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-arrays--structs-ii\">Basic Solidity: Arrays &amp; Structs II\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#review-of-interfacs-importing-from-github--math-in-solidity\">Review of Interfacs, Importing from GitHub, &amp; Math in Solidity\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#libraries\">Libraries\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#safemath-overflow-checking-and-the-unchecked-keywork\">SafeMath, Overflow Checking, and the &quot;unchecked&quot; keywork\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-for-loop\">Basic Solidity: For Loop\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-resetting-an-array\">Basic Solidity: Resetting an Array\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#sending-eth-from-a-contract\">Sending ETH from a Contract\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-constructor\">Basic Solidity: Constructor\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-solidity-modifiers\">Basic Solidity: Modifiers\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#testnet-demo\">Testnet Demo\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#advanced-solidity\">Advanced Solidity\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#immutable--constant\">Immutable &amp; Constant\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#custom-errors\">Custom Errors\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#receive--fallback-functions\">Receive &amp; Fallback Functions\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#lesson-4-recap\">Lesson 4 Recap\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-5-ethersjs-simple-storage\">Lesson 5: Ethers.js Simple Storage\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#effective-debugging-strategies--getting-help\">Effective Debugging Strategies &amp; Getting Help\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#how-to-debug-anything-video\">How to Debug Anything Video\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#installation--setup\">Installation &amp; Setup\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#mac--linux-setup\">Mac &amp; Linux Setup\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#windows-setup\">Windows Setup\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#gitpod\">Gitpod\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#local-development-introduction\">Local Development Introduction\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#optional-javascript-crash-courses\">Optional Javascript Crash Courses\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#tiny-javascript-refresher\">Tiny Javascript Refresher\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#asynchronous-programming-in-javascript\">Asynchronous Programming in Javascript\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#compiling-our-solidity\">Compiling our Solidity\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#ganache--networks\">Ganache &amp; Networks\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#introduction-to-ethersjs\">Introduction to Ethers.js\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#a-note-on-the-await-keyword\">A Note on the await Keyword\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#adding-transaction-overrides\">Adding Transaction Overrides\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#transaction-receipts\">Transaction Receipts\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#sending-a-raw-transaction-in-ethersjs\">Sending a &quot;raw&quot; Transaction in Ethersjs\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#interacting-with-contracts-in-ethersjs\">Interacting with Contracts in Ethersjs\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#environment-variables\">Environment Variables\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#better-private-key-management\">Better Private Key Management\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#optional-prettier-formatting\">Optional Prettier Formatting\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#deploying-to-a-testnet-or-a-mainnet\">Deploying to a Testnet or a Mainnet\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#verifying-on-block-explorers-from-the-ui\">Verifying on Block Explorers from the UI\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#alchemy-dashboard--the-mempool\">Alchemy Dashboard &amp; The Mempool\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#lesson-5-recap\">Lesson 5 Recap\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#typescript-ethers-simple-storage\">Typescript Ethers Simple Storage\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-6-hardhat-simple-storage\">Lesson 6: Hardhat Simple Storage\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction-3\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-setup\">Hardhat Setup\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#troubleshooting-hardaht-setup\">Troubleshooting Hardaht Setup\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-setup-continued\">Hardhat Setup Continued\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#deploying-simplestorage-from-hardhat\">Deploying SimpleStorage from Hardhat\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#networks-in-hardhat\">Networks in Hardhat\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#programatic-verification\">Programatic Verification\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#interacting-with-contracts-in-hardhat\">Interacting with Contracts in Hardhat\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#artifacts-troubleshooting\">Artifacts Troubleshooting\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#custom-hardhat-tasks\">Custom Hardhat Tasks\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-localhost-node\">Hardhat Localhost Node\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#the-hardhat-console\">The Hardhat Console\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-tests\">Hardhat Tests\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-gas-reporter\">Hardhat Gas Reporter\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#solidity-coverage\">Solidity Coverage\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-waffle\">Hardhat Waffle\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#lesson-6-recap\">Lesson 6 Recap\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#typescript-hardhat-simple-storage\">Typescript Hardhat Simple Storage\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-7-hardhat-fund-me\">Lesson 7: Hardhat Fund Me\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction-4\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-setup---fund-me\">Hardhat Setup - Fund Me\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#linting\">Linting\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-setup---fund-me---continued\">Hardhat Setup - Fund Me - Continued\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#importing-from-npm\">Importing from NPM\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-deploy\">Hardhat Deploy\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#mocking\">Mocking\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#utils-folder\">Utils Folder\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#testnet-demo---hardhat-fund-me\">Testnet Demo - Hardhat Fund Me\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#solidity-style-guide\">Solidity Style Guide\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#testing-fund-me\">Testing Fund Me\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#breakpoints--debugging\">Breakpoints &amp; Debugging\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#gas-iii\">Gas III:\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#consolelog--debugging\">console.log &amp; Debugging\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#testing-fund-me-ii\">Testing Fund Me II\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#storage-in-solidity\">Storage in Solidity\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#gas-optimizations-using-storage-knowledge\">Gas Optimizations using Storage Knowledge\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#solidity-chainlink-style-guide\">Solidity Chainlink Style Guide\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#storage-review\">Storage Review\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#staging-tests\">Staging Tests\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#running-scripts-on-a-local-node\">Running Scripts on a Local Node\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#adding-scripts-to-your-packagejson\">Adding Scripts to your package.json\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#pushing-to-github\">Pushing to GitHub\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#-tweet-me-add-your-repo-in\">🐸🐦 Tweet Me (add your repo in)!\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-8-html--javascript-fund-me-full-stack--front-end\">Lesson 8: HTML \u002F Javascript Fund Me (Full Stack \u002F Front End)\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction-5\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#how-websites-work-with-web3-wallets\">How Websites work with Web3 Wallets\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#html-setup\">HTML Setup\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#connecting-html-to-metamask\">Connecting HTML to Metamask\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#javascript-in-its-own-file\">Javascript in it&#39;s own file\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#es6-vs-nodejs\">ES6 vs Nodejs\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#sending-a-transaction-from-a-website\">Sending a transaction from a Website\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#resetting-an-account-in-metamask\">Resetting an Account in Metamask\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#listening-for-events-and-completed-transactions\">Listening for Events and Completed Transactions\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#input-forms\">Input Forms\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#reading-from-the-blockchain\">Reading from the Blockchain\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#withdraw-function\">Withdraw Function\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#lesson-8-recap\">Lesson 8 Recap\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#optional-links\">Optional Links\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-9-hardhat-smart-contract-lottery\">Lesson 9: Hardhat Smart Contract Lottery\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction-6\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-setup---smart-contract-lottery\">Hardhat Setup - Smart Contract Lottery\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#rafflesol-setup\">Raffle.sol Setup\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#introduction-to-events\">Introduction to Events\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#events-in-rafflesol\">Events in Raffle.sol\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#introduction-to-chainlink-vrf\">Introduction to Chainlink VRF\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#sub-lesson-chainlink-vrf\">Sub-Lesson: Chainlink VRF\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#implementing-chainlink-vrf---introduction\">Implementing Chainlink VRF - Introduction\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#hardhat-shorthand\">Hardhat Shorthand\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#implementing-chainlink-vrf---the-request\">Implementing Chainlink VRF - The Request\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#implementing-chainlink-vrf---the-fulfill\">Implementing Chainlink VRF - The FulFill\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#modulo\">Modulo\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#introduction-to-chainlink-keepers\">Introduction to Chainlink Keepers\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#implementing-chainlink-keepers---checkupkeep\">Implementing Chainlink Keepers - checkUpkeep\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#enums\">Enums\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#implementing-chainlink-keepers---checkupkeep-continued\">Implementing Chainlink Keepers - checkUpkeep continued\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#implementing-chainlink-keepers---performupkeep\">Implementing Chainlink Keepers - performUpkeep\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#code-cleanup\">Code Cleanup\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#deploying-rafflesol\">Deploying Raffle.sol\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#mock-chainlink-vrf-coordinator\">Mock Chainlink VRF Coordinator\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#continued\">Continued\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#rafflesol-unit-tests\">Raffle.sol Unit Tests\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#testing-events--chai-matchers\">Testing Events &amp; Chai Matchers\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#continued-i\">Continued I\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-methods--time-travel\">Hardhat Methods &amp; Time Travel\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#continued-ii\">Continued II\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#callstatic\">Callstatic\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#continued-iii\">Continued III\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#massive-promise-test\">Massive Promise Test\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#continued-iv\">Continued IV\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#rafflesol-staging-tests\">Raffle.sol Staging Tests\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#testing-on-a-testnet\">Testing on a Testnet\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#recommended-link-amounts-for-sepolia-staging-test\">Recommended LINK amounts for Sepolia Staging Test:\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#conclusion\">Conclusion\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#typescript---smart-contract-lottery\">Typescript - Smart Contract Lottery\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-10-nextjs-smart-contract-lottery-full-stack--front-end\">Lesson 10: NextJS Smart Contract Lottery (Full Stack \u002F Front End)\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction-7\">Introduction\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#optional-sub-lesson-full-stack-development--other-libraries\">Optional Sub-Lesson: Full Stack Development &amp; Other Libraries\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#nextjs-setup\">NextJS Setup\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#manual-header-i\">Manual Header I\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#react-hooks\">React Hooks\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#manual-header-ii\">Manual Header II\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#useeffect-hook\">useEffect Hook\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#local-storage\">Local Storage\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#isweb3enabledloading\">isWeb3EnabledLoading\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#web3uikit\">web3uikit\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#introduction-to-calling-functions-in-nextjs\">Introduction to Calling Functions in Nextjs\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#automatic-constant-value-ui-updater\">Automatic Constant Value UI Updater\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#runcontractfunction\">runContractFunction\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#usestate\">useState\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#calling-functions-in-nextjs\">Calling Functions in NextJS\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#usenotification\">useNotification\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#reading--displaying-contract-data\">Reading &amp; Displaying Contract Data\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#a-note-about-onsuccess\">A Note about \u003Ccode>onSuccess\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#a-challenge-to-you\">A Challenge to You\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#tailwind--styling\">Tailwind &amp; Styling\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#introduction-to-hosting-your-site\">Introduction to Hosting your Site\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#ipfs\">IPFS\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hosting-on-ipfs\">Hosting on IPFS\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hosting-on-ipfs--filecoin-using-fleek\">Hosting on IPFS &amp; Filecoin using Fleek\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#filecoin-overview\">Filecoin Overview\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#lesson-10-recap\">Lesson 10 Recap\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-11-hardhat-starter-kit\">Lesson 11: Hardhat Starter Kit\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-12-hardhat-erc20s\">Lesson 12: Hardhat ERC20s\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#what-is-an-erc-what-is-an-eip\">What is an ERC? What is an EIP?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#what-is-an-erc20\">What is an ERC20?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#manually-creating-an-erc20-token\">Manually Creating an ERC20 Token\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#creating-an-erc20-token-with-openzeppelin\">Creating an ERC20 Token with Openzeppelin\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#lesson-12-recap\">Lesson 12 Recap\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-13-hardhat-defi--aave\">Lesson 13: Hardhat DeFi &amp; Aave\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#what-is-defi\">What is DeFi?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#what-is-aave\">What is Aave?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#programatic-borrowing--lending\">Programatic Borrowing &amp; Lending\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#weth---wrapped-eth\">WETH - Wrapped ETH\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#forking-mainnet\">Forking Mainnet\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#depositing-into-aave\">Depositing into Aave\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#borrowing-from-aave\">Borrowing from Aave\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#repaying-with-aave\">Repaying with Aave\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#visualizing-the-transactions\">Visualizing the Transactions\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#lesson-13-recap\">Lesson 13 Recap\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#happy-bow-tie-friday-with-austin-griffith\">Happy Bow-Tie Friday with Austin Griffith\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#more-defi-learnings\">More DeFi Learnings:\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-14-hardhat-nfts-everything-you-need-to-know-about-nfts\">Lesson 14: Hardhat NFTs (EVERYTHING you need to know about NFTs)\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#what-is-an-nft\">What is an NFT?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#code-overview\">Code Overview\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hardhat-setup-1\">Hardhat Setup\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#basic-nft\">Basic NFT\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#write-tests\">Write Tests\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#random-ipfs-nft\">Random IPFS NFT\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#mapping-chainlink-vrf-requests\">Mapping Chainlink VRF Requests\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#creating-rare-nfts\">Creating Rare NFTs\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#setting-the-nft-image\">Setting the NFT Image\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#setting-an-nft-mint-price\">Setting an NFT Mint Price\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#deploy-script\">Deploy Script\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#uploading-token-images-with-pinata\">Uploading Token Images with Pinata\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#uploading-token-uris-metadata-with-pinata\">Uploading Token URIs (metadata) with Pinata\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#deploying\">Deploying\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#tests\">Tests\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#dynamic-svg-on-chain-nft\">Dynamic SVG On-Chain NFT\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#what-is-an-svg\">What is an SVG?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#initial-code\">Initial Code\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#base64-encoding\">Base64 Encoding\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#advanced-evm-opcodes-encoding-and-calling\">Advanced: EVM Opcodes, Encoding, and Calling\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#abiencode--abiencodepacked\">abi.encode &amp; abi.encodePacked\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#introduction-to-encoding-function-calls-directly\">Introduction to Encoding Function Calls Directly\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#introduction-to-encoding-function-calls-recap\">Introduction to Encoding Function Calls Recap\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#encoding-function-calls-directly\">Encoding Function Calls Directly\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#creating-an-nft-tokenuri-on-chain\">Creating an NFT TokenURI on-Chain\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#making-the-nft-dynamic\">Making the NFT Dynamic\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#deploy-script-1\">Deploy Script\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#deploying-the-nfts-to-a-testnet\">Deploying the NFTs to a Testnet\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#lesson-14-recap\">Lesson 14 Recap\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#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!)\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction-8\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#part-i-nft-marketplace-contracts\">Part I: NFT Marketplace Contracts\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#hardhat-setup-2\">Hardhat Setup\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#nftmarketplacesol\">NftMarketplace.sol\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#reentrancy\">Reentrancy\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#nftmarketplacesol---continued\">NftMarketplace.sol - Continued\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#nftmarketplacesol---deploy-script\">NftMarketplace.sol - Deploy Script\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#nftmarketplacesol---tests\">NftMarketplace.sol - Tests\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#nftmarketplacesol---scripts\">NftMarketplace.sol - Scripts\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#part-ii-moralis-front-end\">Part II: Moralis Front End\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#what-is-moralis\">What is Moralis?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#nextjs-setup-1\">NextJS Setup\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#adding-tailwind\">Adding Tailwind\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#introduction-to-indexing-in-web3\">Introduction to Indexing in Web3\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#connecting-moralis-to-our-local-hardhat-node\">Connecting Moralis to our Local Hardhat Node\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#moralis-event-sync\">Moralis Event Sync\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#reset-local-chain\">Reset Local Chain\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#moralis-cloud-functions\">Moralis Cloud Functions\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#practice-resetting-the-local-chain\">Practice Resetting the Local Chain\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#moralis-cloud-functions-ii\">Moralis Cloud Functions II\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#querying-the-moralis-database\">Querying the Moralis Database\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#rendering-the-nft-images\">Rendering the NFT Images\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#update-listing-modal\">Update Listing Modal\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#buy-nft-listing\">Buy NFT Listing\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#listing-nfts-for-sale\">Listing NFTs for Sale\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#part-iii-thegraph-front-end\">Part III: TheGraph Front End\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#introduction-9\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#what-is-the-graph\">What is The Graph?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#building-a-subgraph\">Building a Subgraph\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#deploying-our-subgraph\">Deploying our Subgraph\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#reading-from-the-graph\">Reading from The Graph\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hosting-our-dapp\">Hosting our Dapp\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-16-hardhat-upgrades\">Lesson 16: Hardhat Upgrades\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#upgradeable-smart-contracts-overview\">Upgradeable Smart Contracts Overview\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#types-of-upgrades\">Types of Upgrades\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#delegatecall\">Delegatecall\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#small-proxy-example\">Small Proxy Example\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#transparent-upgradeable-smart-contract\">Transparent Upgradeable Smart Contract\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-17-hardhat-daos\">Lesson 17: Hardhat DAOs\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction-10\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#what-is-a-dao\">What is a DAO?\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#how-to-build-a-dao\">How to build a DAO\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>\u003Ca href=\"#lesson-18-security--auditing\">Lesson 18: Security &amp; Auditing\u003C\u002Fa>\u003C\u002Fsummary>\n\u003Col>\n\u003Cli>\u003Ca href=\"#introduction-11\">Introduction\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#slither\">Slither\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#fuzzing-and-eth-security-toolbox\">Fuzzing and Eth Security Toolbox\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#closing-thoughts\">Closing Thoughts\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Fol>\n\u003C\u002Fdetails>\n\u003Cdetails>\n\u003Csummary>More Resources\u003C\u002Fsummary>\n\u003Cul>\n\u003Cli>\u003Ca href=\"#congratulations\">Congratulations\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#where-do-i-go-now\">Where do I go now?\u003C\u002Fa>\u003Cul>\n\u003Cli>\u003Ca href=\"#learning-more\">Learning More\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#community\">Community\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"#hackathons\">Hackathons\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Ful>\n\u003C\u002Fdetails>\n\n# Lesson 0: The Edge of the Rabbit Hole\n\n## Welcome to the course!\n\n_[⌨️ (00:00:00) Lesson 0: Welcome To Blockchain](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=0s)_\n\n## Best Practices\n\n- **Follow the repository:** While going through the course be 100% certain to follow along with the github repository. If you run into in an issue check the chronological-updates in the repo.\n- **Be Active in the community:** Ask questions and engage with other developers going through the course in the discussions tab, be sure to go and say hello or gm! This space is different from the other industries, you don't have to be secretive; communicate, network and learn with others :)\n- **Learn at your own pace:** It doesn't matter if it takes you a day, a week, a month or even a year. Progress >>> Perfection\n- **Take Breaks:** You will exhaust your mind and recall less if you go all out and watch the entire course in one sitting.\n  **Suggested Strategy** every 25 minutes take a 5 min break, and every 2 hours take a longer 30 min break\n- **Refer to Documentation:** Things are constantly being updated, so whenever Patrick opens up some documentation, open it your end and maybe even have the code sample next to you.\n\n# Lesson 1: Blockchain Basics\n\n_[⌨️ (00:09:05) Lesson 1: Blockchain Basics](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=545s)_\n\n## What is a Blockchain? What does a blockchain do?\n\n- [Bitcoin Whitepaper](https:\u002F\u002Fbitcoin.org\u002Fbitcoin.pdf)\n  - [Satoshi Nakamoto](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSatoshi_Nakamoto)\n- [Ethereum Whitepaper](https:\u002F\u002Fethereum.org\u002Fen\u002Fwhitepaper\u002F)\n  - [Vitalik Buterin](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVitalik_Buterin)\n- [What is a Smart Contract?](https:\u002F\u002Fchain.link\u002Feducation\u002Fsmart-contracts)\n- [Nick Szabo](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNick_Szabo)\n- [Hybrid Smart Contracts](https:\u002F\u002Fblog.chain.link\u002Fhybrid-smart-contracts-explained\u002F)\n- [Blockchain Oracles](https:\u002F\u002Fbetterprogramming.pub\u002Fwhat-is-a-blockchain-oracle-f5ccab8dbd72?source=friends_link&sk=d921a38466df8a9176ed8dd767d8c77d)\n- [Terminology](https:\u002F\u002Fconnect.comptia.org\u002Fcontent\u002Farticles\u002Fblockchain-terminology)\n- [Web3](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWeb3)\n- [What is a blockchain](https:\u002F\u002Fwww.investopedia.com\u002Fterms\u002Fb\u002Fblockchain.asp)\n\n## The Purpose Of Smart Contracts\n\n_[⌨️ (00:18:27) The Purpose of Smart Contracts](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=1107)_\n\n- 🎥 [Original Video](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=_JeRq7Gwj5Y&feature=youtu.be)\n- 🦬 [My ETH Denver Talk](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=06hXCX_jj2E)\n- 🍔 [McDonalds Scandal](https:\u002F\u002Fwww.chicagotribune.com\u002Fsns-mcdonalds-story.html)\n- ⛓ [More on the evolution of agreements](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ufVyX7JDCgg)\n- ✍️ [What is a Smart Contract?](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=ZE2HxTmxfrI)\n- 🧱 [How does a blockchain work?](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=SSo_EIwHSd4)\n- 🔮 [Chainlink & Oracles](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=tIUHQ7sDoaU)\n\n## Other Blockchain Benefits\n\n_[⌨️ (00:30:41) Other Blockchain Benefits](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=1841)_\n\n- Decentralized\n- Transparency & Flexibility\n- Speed & Efficiency\n- Security & Immutability\n- Counterparty Risk Removal\n- Trust Minimized Agreements\n\n## What have Smart Contracts done so far?\n\n_[⌨️ (00:36:36) What have Smart Contracts done so far?](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=2196)_\n\n- [DeFi](https:\u002F\u002Fchain.link\u002Feducation\u002Fdefi)\n  - [Defi Llama](https:\u002F\u002Fdefillama.com\u002F)\n  - [Why DeFi is Important](https:\u002F\u002Fmedium.com\u002Fthe-capital\u002Fwhy-defi-1519cc4d4bd3)\n- [DAOs](https:\u002F\u002Fbetterprogramming.pub\u002Fwhat-is-a-dao-what-is-the-architecture-of-a-dao-how-to-build-a-dao-high-level-d096a97162cc)\n- [NFTs](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=9yuHz6g_P50)\n\n## Making Your First Transaction\n\n_[⌨️ (00:39:17) Making Your First Transaction](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=2357)_\n\n- [Metamask Download Link](https:\u002F\u002Fmetamask.io\u002F)\n  - [What is a Private Key?](https:\u002F\u002Fwww.coinbase.com\u002Flearn\u002Fcrypto-basics\u002Fwhat-is-a-private-key)\n  - [What is a Secret Phrase?](https:\u002F\u002Fmetamask.zendesk.com\u002Fhc\u002Fen-us\u002Farticles\u002F360060826432-What-is-a-Secret-Recovery-Phrase-and-how-to-keep-your-crypto-wallet-secure)\n- [Etherscan](https:\u002F\u002Fetherscan.io\u002F)\n- [Sepolia Etherscan](https:\u002F\u002Fsepolia.etherscan.io\u002F)\n- Sepolia Faucet (Check the [link token contracts page](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Flink-token-contracts\u002F#sepolia))\n  - NOTE: The Chainlink documentation always has the most up to date faucets on their [link token contracts page](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Flink-token-contracts\u002F#sepolia). If the faucet above is broken, check the chainlink documentation for the most up to date faucet.\n- OR, use the [Sepolia ETH Faucet](https:\u002F\u002Ffaucets.chain.link\u002F), just be sure to swap your metamask to Sepolia!\n\n## Gas I: Introduction to Gas\n\n_[⌨️ (00:58:59) Gas I: Introduction to Gas](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=3539)_\n\n- [Gas and Gas Fees](https:\u002F\u002Fethereum.org\u002Fen\u002Fdevelopers\u002Fdocs\u002Fgas\u002F)\n- [Wei, Gwei, and Ether Converter](https:\u002F\u002Feth-converter.com\u002F)\n- [ETH Gas Station](https:\u002F\u002Fethgasstation.info\u002F)\n\n## How Do Blockchains Work?\n\n_[⌨️ (01:05:32) How Do Blockchains Work](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=3932)_\n\n- [What is a hash?](https:\u002F\u002Ftechjury.net\u002Fblog\u002Fwhat-is-cryptographic-hash\u002F)\n- [Blockchain Demo](https:\u002F\u002Fandersbrownworth.com\u002Fblockchain\u002F)\n- [Summary](https:\u002F\u002Fethereum.org\u002Fen\u002Fdevelopers\u002Fdocs\u002Fintro-to-ethereum\u002F)\n\n## Signing Transactions\n\n_[⌨️ (01:22:55) Signing Transactions](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=4975)_\n\n- [Public \u002F Private Keys](https:\u002F\u002Fandersbrownworth.com\u002Fblockchain\u002Fpublic-private-keys\u002Fkeys)\n- [Layer 2 and Rollups](https:\u002F\u002Fethereum.org\u002Fen\u002Fdevelopers\u002Fdocs\u002Fscaling\u002Flayer-2-rollups\u002F)\n- [Decentralized Blockchain Oracles](https:\u002F\u002Fblog.chain.link\u002Fwhat-is-the-blockchain-oracle-problem\u002F)\n\n## Gas II\n\n_[⌨️ (01:30:22) Gas II: Block Rewards & EIP 1559](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=5422)_\n\n- [Block Rewards](https:\u002F\u002Fwww.investopedia.com\u002Fterms\u002Fb\u002Fblock-reward.asp)\n- Advanced Gas\n  - [EIP 1559](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=MGemhK9t44Q)\n  - GWEI, WEI, and ETH\n    - [ETH Converter](https:\u002F\u002Feth-converter.com\u002F)\n\n## Gas II Summary\n\n_[⌨️ (01:36:44) Gas II Summary](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=5804)_\n\n- [Run Your Own Ethereum Node](https:\u002F\u002Fgeth.ethereum.org\u002Fdocs\u002Fgetting-started)\n\n## High-Level Blockchain Fundamentals\n\n_[⌨️ (01:39:32) High-Level Blockchain Fundamentals]https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=5972s()_\n\n- [Consensus](https:\u002F\u002Fwiki.polkadot.network\u002Fdocs\u002Flearn-consensus)\n- [Proof of Stake](https:\u002F\u002Fethereum.org\u002Fen\u002Fdevelopers\u002Fdocs\u002Fconsensus-mechanisms\u002Fpos\u002F)\n- [Proof of Work](https:\u002F\u002Fethereum.org\u002Fen\u002Fdevelopers\u002Fdocs\u002Fconsensus-mechanisms\u002Fpow\u002F)\n- [Nakamoto Consensus](https:\u002F\u002Fblockonomi.com\u002Fnakamoto-consensus\u002F)\n- [Ethereum 2 (the merge)](https:\u002F\u002Fethereum.org\u002Fen\u002Feth2\u002F)\n\n🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊 Completed Blockchain Basics! 🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊\n\n# Lesson 2: [Welcome to Remix! Simple Storage](https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Fsimple-storage-fcc)\n\n_[⌨️ (02:01:16) Lesson 2: Welcome to Remix! Simple Storage](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=7276s)_\n\n💻 Code: https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Fsimple-storage-fcc\n\n## Introduction\n\n_[⌨️ (02:03:05) Introduction](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=7385)_\n\n- [Remix](https:\u002F\u002Fremix.ethereum.org\u002F)\n- [Solidity Documentation](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Findex.html)\n\n## Setting Up Your First Contract\n\n_[⌨️ (02:05:18) Setting Up Your First Contract](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=7518)_\n\n- Versioning\n- Take notes in your code!\n- [What is a software license](https:\u002F\u002Fsnyk.io\u002Flearn\u002Fwhat-is-a-software-license\u002F)\n- SPDX License\n- Compiling\n- Contract Declaration\n\n## Basic Solidity: Types\n\n_[⌨️ (02:12:28) Basic Solidity Types](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=7948)_\n\n- [Types & Declaring Variables](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Fv0.8.13\u002F)\n  - `uint256`, `int256`, `bool`, `string`, `address`, `bytes32`\n  - [Solidity Types](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Ftypes.html)\n  - [Bits and Bytes](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=Dnd28lQHquU)\n- Default Initializations\n- Comments\n\n## Basic Solidity: Functions\n\n_[⌨️ (02:18:40) Basic Solidity Functions](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=8320)_\n\n- Functions\n- Deploying a Contract\n  - Smart Contracts have addresses just like our wallets\n- Calling a public state-changing Function\n- [Visibility](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fcontracts.html#visibility-and-getters)\n- Gas III | An example\n- Scope\n- View & Pure Functions\n\n## Basic Solidity: Arrays & Structs\n\n_[⌨️ (02:35:30) Basic Solidity Arrays & Structs](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=9331)_\n\n- Structs\n- Intro to Storage\n- Arrays\n- Dynamic & Fixed Sized\n- `push` array function\n\n## Basic Solidity: Compiler Errors and Warnings\n\n_[⌨️ (02:45:35) Basic Solidity Errors & Warnings](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=9935)_\n\n- Yellow: Warnings are Ok\n- Red: Errors are not Ok\n\n## Memory, Storage, Calldata (Intro)\n\n_[⌨️ (02:46:34) Basic Solidity Memory, Storage, & Calldata (Intro)](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=9994)_\n\n- 6 Places you can store and access data\n  - calldata\n  - memory\n  - storage\n  - code\n  - logs\n  - stack\n\n## Mappings\n\n_[⌨️ (02:50:17) Basic Solidity Mappings](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=10217)_\n\n- [Mappings](https:\u002F\u002Fsolidity-by-example.org\u002Fmapping)\n\n## Deploying your First Contract\n\n_[⌨️ (02:53:38) Deploying your First Contract](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=10418)_\n\n- A testnet or mainnet\n- Connecting Metamask\n- [Find a faucet here](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Flink-token-contracts\u002F#Sepolia)\n- See the faucets at the top of this readme!\n- Interacting with Deployed Contracts\n\n## The EVM & A Recap of Lesson 2\n\n_[⌨️ (03:03:07) The EVM & A Recap of Lesson 2](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=10987)_\n\n- The EVM\n\n# Lesson 3: Remix Storage Factory\n\n_[⌨️ (03:05:34) Lesson 3: Remix Storage Factory](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=11134s)_\n\n💻 Code: https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Fstorage-factory-fcc\n\n## Introduction\n\n_[⌨️ (03:06:06) Introduction](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=11166)_\n\n- [Factory Pattern](https:\u002F\u002Fbetterprogramming.pub\u002Flearn-solidity-the-factory-pattern-75d11c3e7d29)\n\n## Basic Solidity: Importing Contracts into other Contracts\n\n_[⌨️ (03:07:29) Importing Contracts into other Contracts](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=11249)_\n\n- [Composibility](https:\u002F\u002Fchain.link\u002Ftechtalks\u002Fdefi-composability)\n- [Solidity new keyword](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fcontrol-structures.html?highlight=new#creating-contracts-via-new)\n- [Importing Code in solidity](https:\u002F\u002Fsolidity-by-example.org\u002Fimport)\n\n## Basic Solidity: Interacting with other Contracts\n\n_[⌨️ (03:16:36) Interacting with other contracts](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=11796)_\n\n- To interact, you always need: ABI + Address\n- [ABI](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fabi-spec.html?highlight=abi)\n\n## Basic Solidity: Inheritance & Overrides\n\n_[⌨️ (03:25:23) Inheritance & Overrides](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=12323)_\n\n- [Inheritance](https:\u002F\u002Fsolidity-by-example.org\u002Finheritance)\n- [Override & Virtual Keyword](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fcontracts.html?highlight=override#function-overriding)\n\n## Lesson 3 Recap\n\n_[⌨️ (03:30:29) Lesson 3 Recap](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=12629)_\n\n# Lesson 4: Remix Fund Me\n\n_[⌨️ (03:31:55) Lesson 4: Remix Fund Me](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=12715s)_\n\n💻 Code: https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Ffund-me-fcc\n\n## Introduction\n\n## Sending ETH Through a Function & Reverts\n\n- [Fields in a Transaction](https:\u002F\u002Fethereum.org\u002Fen\u002Fdevelopers\u002Fdocs\u002Ftransactions\u002F)\n- [More on v,r,s](https:\u002F\u002Fethereum.stackexchange.com\u002Fquestions\u002F15766\u002Fwhat-does-v-r-s-in-eth-gettransactionbyhash-mean)\n- [payable](https:\u002F\u002Fsolidity-by-example.org\u002Fpayable)\n- [msg.value & Other global keywords](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fcheatsheet.html?highlight=cheatsheet#global-variables)\n- [require](https:\u002F\u002Fcodedamn.com\u002Fnews\u002Fsolidity\u002Fwhat-is-require-in-solidity)\n- [revert](https:\u002F\u002Fmedium.com\u002Fblockchannel\u002Fthe-use-of-revert-assert-and-require-in-solidity-and-the-new-revert-opcode-in-the-evm-1a3a7990e06e)\n\n## Chainlink & Oracles\n\n- [What is a blockchain oracle?](https:\u002F\u002Fchain.link\u002Feducation\u002Fblockchain-oracles)\n- [What is the oracle problem?](https:\u002F\u002Fblog.chain.link\u002Fwhat-is-the-blockchain-oracle-problem\u002F)\n- [Chainlink](https:\u002F\u002Fchain.link\u002F)\n- [Chainlink Price Feeds (Data Feeds)](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Fget-the-latest-price\u002F)\n  - [data.chain.link](https:\u002F\u002Fdata.chain.link\u002F)\n- [Chainlink VRF](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Fchainlink-vrf\u002F)\n- [Chainlink Keepers](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Fchainlink-keepers\u002Fintroduction\u002F)\n- [Chainlink API Calls](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Frequest-and-receive-data\u002F)\n- [Importing Tokens into your Metamask](https:\u002F\u002Fconsensys.net\u002Fblog\u002Fmetamask\u002Fhow-to-add-your-custom-tokens-in-metamask\u002F)\n- [Request and Receive Chainlink Model](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Farchitecture-request-model\u002F)\n\n## Review of Sending ETH and working with Chainlink\n\n## Interfaces & Price Feeds\n\n- [Chainlink Price Feeds (Data Feeds)](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Fget-the-latest-price\u002F)\n- [Chainlink GitHub](https:\u002F\u002Fgithub.com\u002Fsmartcontractkit\u002Fchainlink)\n- [Interface](https:\u002F\u002Fsolidity-by-example.org\u002Finterface)\n\n## Importing from GitHub & NPM\n\n- [Chainlink NPM Package](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@chainlink\u002Fcontracts)\n\n## Floating Point Math in Solidity\n\n- [tuple](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fabi-spec.html?highlight=tuple#handling-tuple-types)\n- [Floating Point Numbers in Solidity](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F58277234\u002Fdoes-solidity-supports-floating-point-number)\n- [Type Casting](https:\u002F\u002Fethereum.stackexchange.com\u002Fquestions\u002F6891\u002Ftype-casting-in-solidity)\n- Gas Estimation Failed\n  - Someone should make an article explaining this error\n\n## Basic Solidity: Arrays & Structs II\n\n- [msg.sender](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fcheatsheet.html?highlight=msg.sender)\n\n## Review of Interfaces, Importing from GitHub, & Math in Solidity\n\n## Libraries\n\n- [Library](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Fv0.8.14\u002Fcontracts.html?highlight=library#libraries)\n- [Solidity-by-example Library](https:\u002F\u002Fsolidity-by-example.org\u002Flibrary)\n\n## SafeMath, Overflow Checking, and the \"unchecked\" keyword\n\n- [Openzeppelin Safemath](https:\u002F\u002Fgithub.com\u002FOpenZeppelin\u002Fopenzeppelin-contracts\u002Fblob\u002Fmaster\u002Fcontracts\u002Futils\u002Fmath\u002FSafeMath.sol)\n- [unchecked vs. checked](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fcontrol-structures.html#checked-or-unchecked-arithmetic)\n\n## Basic Solidity: For Loop\n\n- [For Loop](https:\u002F\u002Fsolidity-by-example.org\u002Floop)\n- `\u002F* *\u002F` is another way to make comments\n\n## Basic Solidity: Resetting an Array\n\n## Sending ETH from a Contract\n\n- [Transfer, Send, Call](https:\u002F\u002Fsolidity-by-example.org\u002Fsending-ether\u002F)\n- [this keyword](https:\u002F\u002Fethereum.stackexchange.com\u002Fquestions\u002F1781\u002Fwhat-is-the-this-keyword-in-solidity)\n\n## Basic Solidity: Constructor\n\n- [Constructor](https:\u002F\u002Fsolidity-by-example.org\u002Fconstructor)\n\n## Basic Solidity: Modifiers\n\n- [Double equals](https:\u002F\u002Fwww.geeksforgeeks.org\u002Fsolidity-operators\u002F)\n- [Modifier](https:\u002F\u002Fsolidity-by-example.org\u002Ffunction-modifier)\n\n## Testnet Demo\n\n- [Disconnecting Metamask](https:\u002F\u002Fhelp.1inch.io\u002Fen\u002Farticles\u002F4666771-metamask-how-to-connect-disconnect-and-switch-accounts-with-metamask-on-1inch-network)\n\n## Advanced Solidity\n\n### Immutable & Constant\n\n- [Immutable](https:\u002F\u002Fsolidity-by-example.org\u002Fimmutable)\n- [Constant](https:\u002F\u002Fsolidity-by-example.org\u002Fconstants)\n- [Current ETH Gas Prices](https:\u002F\u002Fetherscan.io\u002Fgastracker)\n- Don't stress about gas optimizations! (yet)\n- Naming Conventions\n  - [Someone make this!](https:\u002F\u002Fgithub.com\u002Fsmartcontractkit\u002Ffull-blockchain-solidity-course-js\u002Fissues\u002F13)\n\n### Custom Errors\n\n- [Custom Errors Introduction](https:\u002F\u002Fblog.soliditylang.org\u002F2021\u002F04\u002F21\u002Fcustom-errors\u002F)\n\n### Receive & Fallback Functions\n\n- [Solidity Docs Special Functions](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fcontracts.html?highlight=fallback#special-functions)\n- [Fallback](https:\u002F\u002Fsolidity-by-example.org\u002Ffallback)\n- [Receive](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fcontracts.html?highlight=fallback#receive-ether-function)\n\n## Lesson 4 Recap\n\n🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊 Completed Solidity Basics! 🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊\n\n# Lesson 5: Ethers.js Simple Storage\n\n_[⌨️ (05:30:42) Lesson 5: Ethers.js Simple Storage](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=19842s)_\n\n💻 Code: https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Fethers-simple-storage-fcc\n\n🧪 [Alchemy: https:\u002F\u002Falchemy.com\u002F?a=673c802981](https:\u002F\u002Falchemy.com\u002F?a=673c802981)\n\n## Effective Debugging Strategies & Getting Help\n\n_[⌨️ (5:30:46) Effective Debugging Stategies & Getting Help](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=19846)_\n\n1. Tinker and isolate problem\n   1. For this course, take at LEAST 15 minutes to figure out a bug.\n2. Google \u002F Web Search the Exact problem\n   1. Go to this GitHub Repo \u002F Discussions\n3. Ask a question on a Forum like Stack Exchange Ethereum or Stack Overflow\n   1. Format your questions!!\n   2. Use [Markdown](https:\u002F\u002Fwww.markdowntutorial.com\u002F)\n\n### How to Debug Anything Video\n\n- [Patrick's Original Video](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=XT8STflvwNo)\n\n## Installation & Setup\n\n- [Visual Studio Code](https:\u002F\u002Fcode.visualstudio.com\u002F)\n  - [Crash Course](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=WPqXP_kLzpo)\n- [NodeJS](https:\u002F\u002Fnodejs.org\u002Fen\u002F)\n- [VSCode Keybindings](https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fgetstarted\u002Fkeybindings)\n- [Git](https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fen\u002Fv2\u002FGetting-Started-Installing-Git)\n- [What is a terminal?](https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Feditor\u002Fintegrated-terminal)\n\n### Mac & Linux Setup\n\n### Windows Setup\n\n- [WSL](https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fwindows\u002Fwsl\u002Finstall)\n  - When working in WSL, use Linux commands instead of Windows commands\n- [TroubleShooting](https:\u002F\u002Fdocs.microsoft.com\u002Fen-us\u002Fwindows\u002Fwsl\u002Ftroubleshooting)\n- `curl -o- https:\u002F\u002Fraw.githubusercontent.com\u002Fnvm-sh\u002Fnvm\u002Fv0.39.1\u002Finstall.sh | bash`\n\n> ⚠️ Please use Gitpod as an absolute last resort\n\n### Gitpod\n\n- [Gitpod](https:\u002F\u002Fwww.gitpod.io\u002F)\n  - **If using this, NEVER share a private key with real money on Gitpod**\n  - Ideally you figure out the MacOS, Linux, or Windows install though\n\n## Local Development Introduction\n\n- `CMD + K` or `CTRL + K` clears the terminal\n- `mkdir ethers-simple-storage-fcc`\n- `code .` to open VSCode in a new VSCode window\n\n### Optional Javascript Crash Courses\n\n- [NodeJS Course](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=RLtyhwFtXQA)\n- [Javascript Course](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=jS4aFq5-91M)\n- Import your `SimpleStorage.sol`\n- [Solidity + Hardhat VSCode Extension](https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=NomicFoundation.hardhat-solidity)\n\n- Format your solidity code with:\n\n```\n    \"[solidity]\": {\n        \"editor.defaultFormatter\": \"NomicFoundation.hardhat-solidity\"\n    },\n    \"[javascript]\":{\n      \"editor.defaultFormatter\": \"esbenp.prettier-vscode\"\n    }\n```\n\nIn your `.vscode\u002Fsettings.json` file.\n\n- [Prettier Extension](https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=esbenp.prettier-vscode)\n\n## Tiny Javascript Refresher\n\n- [Javascript Tips](https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Flearn-javascript-free-js-courses-for-beginners\u002F)\n\n## Asynchronous Programming in Javascript\n\n- [Asynchronous Programming](https:\u002F\u002Fwww.bmc.com\u002Fblogs\u002Fasynchronous-programming\u002F)\n- [async keyword](https:\u002F\u002Fwww.w3schools.com\u002FJS\u002F\u002Fjs_async.asp)\n- [Promise in Javascript](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FPromise)\n- [await keyword](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FOperators\u002Fawait)\n\n## Compiling our Solidity\n\n- [Yarn Install](https:\u002F\u002Fyarnpkg.com\u002Fgetting-started\u002Finstall)\n- [solc-js](https:\u002F\u002Fgithub.com\u002Fethereum\u002Fsolc-js)\n  - `yarn add solc@0.8.7-fixed`\n- [yarn scripts](https:\u002F\u002Fclassic.yarnpkg.com\u002Flang\u002Fen\u002Fdocs\u002Fcli\u002Frun\u002F)\n\n## Ganache & Networks\n\n- [Ganache](https:\u002F\u002Ftrufflesuite.com\u002Fganache\u002F)\n- Networks in Metamask\n- RPC URL\n- [Geth](https:\u002F\u002Fgithub.com\u002Fethereum\u002Fgo-ethereum)\n- [JSON RPC Spec Playground](https:\u002F\u002Fplayground.open-rpc.org\u002F?schemaUrl=https:\u002F\u002Fraw.githubusercontent.com\u002Fethereum\u002Fexecution-apis\u002Fassembled-spec\u002Fopenrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=false&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false)\n\n## Introduction to Ethers.js\n\n- [Ethers.js](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fgetting-started\u002F)\n- [prettier-plugin-solidity](https:\u002F\u002Fgithub.com\u002Fprettier-solidity\u002Fprettier-plugin-solidity)\n\n### A Note on the await Keyword\n\n## Adding Transaction Overrides\n\n## Transaction Receipts\n\n## Sending a \"raw\" Transaction in Ethers.js\n\n## Interacting with Contracts in Ethers.js\n\n- [EVM Decompiler](https:\u002F\u002Fethervm.io\u002Fdecompile)\n- [BigNumber](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fapi\u002Futils\u002Fbignumber\u002F)\n\n## Environment Variables\n\n- [dotenv](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fdotenv)\n- [.gitignore](https:\u002F\u002Fwww.atlassian.com\u002Fgit\u002Ftutorials\u002Fsaving-changes\u002Fgitignore)\n\n## Better Private Key Management\n\n- [wallet.encrypt](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fapi\u002Fsigner\u002F#Wallet-encrypt)\n- [THE .ENV PLEDGE](https:\u002F\u002Fgithub.com\u002Fsmartcontractkit\u002Ffull-blockchain-solidity-course-js\u002Fdiscussions\u002F5)\n\n## Optional Prettier Formatting\n\n- [Prettier](https:\u002F\u002Fprettier.io\u002Fdocs\u002Fen\u002Findex.html)\n- [Best README Template](https:\u002F\u002Fgithub.com\u002Fothneildrew\u002FBest-README-Template)\n\n## Deploying to a Testnet or a Mainnet\n\n- [Alchemy](https:\u002F\u002Falchemy.com\u002F?a=673c802981)\n- [Getting your private key from Metamask](https:\u002F\u002Fmetamask.zendesk.com\u002Fhc\u002Fen-us\u002Farticles\u002F360015289632-How-to-Export-an-Account-Private-Key)\n- `CTRL + C` stops any terminal command\n\n## Verifying on Block Explorers from the UI\n\n## Alchemy Dashboard & The Mempool\n\n- [Special Guest Albert Hu](https:\u002F\u002Ftwitter.com\u002Fthatguyintech)\n- [Mempool](https:\u002F\u002Fethereum.org\u002Fen\u002Fdevelopers\u002Ftutorials\u002Fsending-transactions-using-web3-and-alchemy\u002F#see-your-transaction-in-the-mempool)\n\n## Lesson 5 Recap\n\n### Typescript Ethers Simple Storage\n\n# Lesson 6: Hardhat Simple Storage\n\n_[⌨️ (08:20:17) Lesson 6: Hardhat Simple Storage](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=30017s)_\n\n💻 Code: https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Fhardhat-simple-storage-fcc\n\n## Introduction\n\n_[⌨️ (08:20:19) Introduction](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=30019)_\n\n## Hardhat Setup\n\n_[⌨️ (08:22:47) Hardhat Setup](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=30167)_\n\n- [Hardhat Documentation](https:\u002F\u002Fhardhat.org\u002F)\n- [DevDependencies vs Dependencies](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F18875674\u002Fwhats-the-difference-between-dependencies-devdependencies-and-peerdependencies)\n- [@ Sign node modules](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F36667258\u002Fwhat-is-the-meaning-of-the-at-prefix-on-npm-packages)\n\n### Troubleshooting Hardhat Setup\n\n_[⌨️ (08:29:43) Troubleshooting Hardhat Setup](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=30583)_\n\n- [Special Guest Cami Ramos Garzon](https:\u002F\u002Ftwitter.com\u002Fcamiinthisthang)\n\n## Hardhat Setup Continued\n\n_[⌨️ (08:31:48) Hardhat Setup Continued](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=30708)_\n\n## Deploying SimpleStorage from Hardhat\n\n_[⌨️ (08:33:10) Deploying SimpleStorage from Hardhat](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=30790)_\n\n## Networks in Hardhat\n\n_[⌨️ (08:41:44) Networks in Hardhat](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=31304)_\n\n- [The Hardhat Network](https:\u002F\u002Fhardhat.org\u002Fhardhat-network\u002F)\n- [Hardhat configuration](https:\u002F\u002Fhardhat.org\u002Fconfig\u002F#configuration)\n- [Chain ID List](https:\u002F\u002Fchainlist.org\u002F)\n\n## Programmatic Verification\n\n_[⌨️ (08:51:16) Programmatic Verification](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=31876)_\n\n- [Etherscan Verify Tutorial](https:\u002F\u002Fdocs.etherscan.io\u002Ftutorials\u002Fverifying-contracts-programmatically)\n- [Etherscan Docs](https:\u002F\u002Fdocs.etherscan.io\u002F)\n- [Hardhat-Etherscan](https:\u002F\u002Fhardhat.org\u002Fplugins\u002Fnomiclabs-hardhat-etherscan.html)\n- [Etherscan API Keys](https:\u002F\u002Finfo.etherscan.com\u002Fapi-keys\u002F)\n- [Javascript == vs ===](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F359494\u002Fwhich-equals-operator-vs-should-be-used-in-javascript-comparisons)\n\n## Interacting with Contracts in Hardhat\n\n_[⌨️ (09:06:37) Interacting with Contracts in Hardhat](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=32797)_\n\n## Artifacts Troubleshooting\n\n_[⌨️ (09:09:42) Artifacts Troubleshooting](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=32982)_\n\n## Custom Hardhat Tasks\n\n_[⌨️ (09:10:52) Custom Hardhat Tasks](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=33052)_\n\n- [Hardhat Tasks](https:\u002F\u002Fhardhat.org\u002Fguides\u002Fcreate-task.html)\n- [Javascript Arrow Functions](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FFunctions\u002FArrow_functions)\n\n## Hardhat Localhost Node\n\n_[⌨️ (09:18:12) Hardhat Localhost Node](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=33492)_\n\n## The Hardhat Console\n\n_[⌨️ (09:23:11) The Hardhat Console](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=33791)_\n\n- [Hardhat Console](https:\u002F\u002Fhardhat.org\u002Fguides\u002Fhardhat-console.html)\n\n## Hardhat Tests\n\n_[⌨️ (09:26:13) Hardhat Tests](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=33973)_\n\n- [Hardhat Tests](https:\u002F\u002Fhardhat.org\u002Ftutorial\u002Ftesting-contracts.html#_5-testing-contracts)\n- [Mocha Style Tests](https:\u002F\u002Fmochajs.org\u002F)\n- [Chai](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fchai)\n- [Waffle Tests](https:\u002F\u002Fethereum-waffle.readthedocs.io\u002Fen\u002Flatest\u002F)\n\n## Hardhat Gas Reporter\n\n_[⌨️ (09:38:10) Hardhat Gas Reporter](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=34690)_\n\n- [Hardhat Gas Reporter](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fhardhat-gas-reporter)\n- [Coinmarketcap API](https:\u002F\u002Fcoinmarketcap.com\u002Fapi\u002F)\n\n## Solidity Coverage\n\n_[⌨️ (09:44:40) Solidity Coverage](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=35080)_\n\n- [Solidity Coverage](https:\u002F\u002Fgithub.com\u002Fsc-forks\u002Fsolidity-coverage)\n\n## Hardhat Waffle\n\n_[⌨️ (09:47:02) Hardhat Waffle](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=35222)_\n\n- [Hardhat-Waffle](https:\u002F\u002Fnpm.io\u002Fpackage\u002F@nomiclabs\u002Fhardhat-waffle)\n\n## Lesson 6 Recap\n\n_[⌨️ (09:47:37) Lesson 6 Recap](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=35257)_\n\n### Typescript Hardhat Simple Storage\n\n_[⌨️ (09:52:15) Typescript Hardhat Simple Storage](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=35535)_\n\n- [Typechain](https:\u002F\u002Fgithub.com\u002Fdethcrypto\u002FTypeChain)\n\n```\nyarn add --dev @typechain\u002Fethers-v5 @typechain\u002Fhardhat @types\u002Fchai @types\u002Fnode @types\u002Fmocha ts-node typechain typescript\n```\n\n# Lesson 7: Hardhat Fund Me\n\n_[⌨️ (10:00:48) Lesson 7: Hardhat Fund Me](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=36048s)_\n\n💻 Code: https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Fhardhat-fund-me-fcc\n\n## Introduction\n\n_[⌨️ (10:00:50) Introduction](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=36050)_\n\n## Hardhat Setup - Fund Me\n\n_[⌨️ (10:03:41) Hardhat Setup - Fund Me](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=36221)_\n\n## Linting\n\n_[⌨️ (10:06:20) Linting](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=36380)_\n\n- [Eslint](https:\u002F\u002Feslint.org\u002F)\n- [Solhint](https:\u002F\u002Fgithub.com\u002Fprotofire\u002Fsolhint)\n- [Linting Code](https:\u002F\u002Fwww.perforce.com\u002Fblog\u002Fqac\u002Fwhat-lint-code-and-why-linting-important)\n\n## Hardhat Setup - Fund Me - Continued\n\n_[⌨️ (10:07:47) Hardhat Setup - Fund Me - Continued](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=36467)_\n\n## Importing from NPM\n\n_[⌨️ (10:09:38) Importing from NPM](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=36578)_\n\n- [@chainlink\u002Fcontracts](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@chainlink\u002Fcontracts)\n\n## Hardhat Deploy\n\n_[⌨️ (10:10:43) Hardhat Deploy](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=36643)_\n\n- [Hardhat Deploy](https:\u002F\u002Fgithub.com\u002Fwighawag\u002Fhardhat-deploy)\n\n## Mocking\n\n_[⌨️ (10:21:05) Mocking](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=37265)_\n\n- [Mocking](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F2665812\u002Fwhat-is-mocking)\n- [Aave Github](https:\u002F\u002Fgithub.com\u002Faave\u002Faave-v3-core)\n- [Chainlink Github](https:\u002F\u002Fgithub.com\u002Fsmartcontractkit\u002Fchainlink)\n- Multiple Versions of Solidity\n- Tags in hardhat\n\n## Utils Folder\n\n_[⌨️ (10:52:51) Utils Folder](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=39171)_\n\n## Testnet Demo - Hardhat Fund Me\n\n_[⌨️ (10:55:45) Testnet Demo - Hardhat Fund Me](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=39345)_\n\n- Hardhat Deploy Block Confirmations\n\n### TypeScript\n\n- [Code file](https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Fhardhat-fund-me-fcc\u002Fblob\u002F84271e7002e55d86c90b26466ff27bc067f25de0\u002Fdeploy\u002F01-deploy-fund-me.ts#L29) (TypeScript edition)\n- Define blockConfirmations in the `helper-hardhat-config.ts` file instead of `hardhat-config.js`.\n\n## Solidity Style Guide\n\n_[⌨️ (11:00:10) Solidity Style Guide](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=39610)_\n\n- [Style Guide](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fstyle-guide.html)\n- [NatSpec](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fnatspec-format.html)\n\n## Testing Fund Me\n\n_[⌨️ (11:08:36) Testing Fund Me](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=40116)_\n\n- [Unit Testing](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FUnit_testing)\n- [Hardhat Deploy Fixtures](https:\u002F\u002Fgithub.com\u002Fwighawag\u002Fhardhat-deploy#creating-fixtures)\n- [ethers.getContract](https:\u002F\u002Fgithub.com\u002Fwighawag\u002Fhardhat-deploy-ethers)\n- [expect](https:\u002F\u002Fethereum-waffle.readthedocs.io\u002Fen\u002Flatest\u002Fmatchers.html)\n- [ethers.utils.parseUnits](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fapi\u002Futils\u002Fdisplay-logic\u002F#utils-parseUnits)\n- [Waffle Chai Matchers](https:\u002F\u002Fethereum-waffle.readthedocs.io\u002Fen\u002Flatest\u002Fmatchers.html)\n\n## Breakpoints & Debugging\n\n_[⌨️ (11:30:39) Breakpoints & Debugging](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=41439)_\n\n- [VSCode Breakpoints](https:\u002F\u002Fcode.visualstudio.com\u002FDocs\u002Feditor\u002Fdebugging)\n\n## Gas III\n\n_[⌨️ (11:33:40) Gas III](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=41620)_\n\n- [Transaction Response](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fapi\u002Fproviders\u002Ftypes\u002F#providers-TransactionResponse)\n- [Transaction Receipt](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fapi\u002Fproviders\u002Ftypes\u002F#providers-TransactionReceipt)\n\n## console.log & Debugging\n\n_[⌨️ (11:36:35) console.log & Debugging](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=41795)_\n\n- [Hardhat console.log](https:\u002F\u002Fhardhat.org\u002Fhardhat-network\u002Freference\u002F#console-log)\n\n## Testing Fund Me II\n\n_[⌨️ (11:37:31) Testing Fund Me II](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=41851)_\n\n## Storage in Solidity\n\n_[⌨️ (11:44:34) Storage in Solidity](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=42274)_\n\n- [Storage Layout](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Finternals\u002Flayout_in_storage.html)\n- [Purpose of the memory keyword](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F33839154\u002Fin-ethereum-solidity-what-is-the-purpose-of-the-memory-keyword)\n- [getStorageAt](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fapi\u002Fproviders\u002Fprovider\u002F#Provider-getStorageAt)\n\n## Gas Optimizations using Storage Knowledge\n\n_[⌨️ (11:52:38) Gas Optimizations using Storage Knowledge](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=42758)_\n\n- [Opcodes](https:\u002F\u002Fethereum.org\u002Fen\u002Fdevelopers\u002Fdocs\u002Fevm\u002Fopcodes\u002F)\n- [Opcodes by Gas](https:\u002F\u002Fgithub.com\u002Fcrytic\u002Fevm-opcodes)\n- [Opcodes by Gas](https:\u002F\u002Fevm.codes\u002F)\n- Append `s_` to storage variables\n- Append `i_` to immutable variables\n- Caps lock and underscore constant variables\n\n## Solidity Chainlink Style Guide\n\n_[⌨️ (12:05:29) Solidity Chainlink Style Guide](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=43529)_\n\n- [Chainlink Solidity Style Guide](https:\u002F\u002Fgithub.com\u002Fsmartcontractkit\u002Ffull-blockchain-solidity-course-js\u002Fissues\u002F13)\n\n## Storage Review\n\n_[⌨️ (12:09:59) Storage Review](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=43799)_\n\n## Staging Tests\n\n_[⌨️ (12:11:43) Staging Tests](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=43903)_\n\n- [Ternary](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FOperators\u002FConditional_Operator)\n\n## Running Scripts on a Local Node\n\n_[⌨️ (12:17:58) Running Scripts on a Local Node](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=44278)_\n\n## Adding Scripts to your package.json\n\n_[⌨️ (12:22:00) Adding Scripts to your package.json](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=44520)_\n\n## Pushing to GitHub\n\n_[⌨️ (12:25:17) Pushing to GitHub](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=44717)_\n\n- [Github Quickstart](https:\u002F\u002Fdocs.github.com\u002Fen\u002Fget-started\u002Fquickstart)\n- [What is Git?](https:\u002F\u002Fwww.git-scm.com\u002Fbook\u002Fen\u002Fv2\u002FGetting-Started-What-is-Git%3F)\n- [The quickstart that we follow in the video](https:\u002F\u002Fdocs.github.com\u002Fen\u002Fget-started\u002Fimporting-your-projects-to-github\u002Fimporting-source-code-to-github\u002Fadding-locally-hosted-code-to-github#adding-a-local-repository-to-github-using-git)\n- [Learn about git and GitHub](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=RGOj5yH7evk)\n\n## 🐸🐦 [Tweet Me (add your repo in)!](https:\u002F\u002Ftwitter.com\u002Fintent\u002Ftweet?text=I%20just%20made%20my%20first%20Smart%20Contract%20repo%20using%20@solidity_lang,%20@HardhatHQ,%20@chainlink,%20@AlchemyPlatform,%20and%20more!%0a%0aThanks%20@PatrickAlphaC!!)\n\n# Lesson 8: HTML \u002F Javascript Fund Me (Full Stack \u002F Front End)\n\n_[⌨️ (12:32:57) Lesson 8: HTML \u002F Javascript Fund Me (Full Stack \u002F Front End)](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=45177s)_\n\n💻 Code: https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Fhtml-fund-me-fcc\n\n## Introduction\n\n## How Websites work with Web3 Wallets\n\n- [How to Connect your Smart Contracts to Metamask](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=pdsYCkUWrgQ)\n  - 💻 Code from Video: https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Ffull-stack-web3-metamask-connectors\n  - ✍️ Article from Video: https:\u002F\u002Fbetterprogramming.pub\u002Feverything-you-need-to-know-about-fullstack-web3-94c0f1b18019?sk=a2764bcbdae98bf05e1052931de77982\n\n## HTML Setup\n\n- Live Server: ExtensionID: ritwickdey.LiveServer\n\n## Connecting HTML to Metamask\n\n- [Metamask Docs](https:\u002F\u002Fdocs.metamask.io\u002Fguide\u002F)\n\n## Javascript in it's own file\n\n## ES6 vs Nodejs\n\n- [ES6 vs Nodesjs](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F31354559\u002Fusing-node-js-require-vs-es6-import-export#31367852)\n- [Ethers docs for web browser](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fgetting-started\u002F#getting-started--importing--web-browser)\n- [module vs text\u002Fjavascript](https:\u002F\u002Fstackoverflow.com\u002Fquestions\u002F51418964\u002Fscript-type-text-javascript-vs-script-type-module)\n\n## Sending a transaction from a Website\n\n- [Web3Provider](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fapi\u002Fproviders\u002Fother\u002F#Web3Provider)\n- [Adding a network to metamask](https:\u002F\u002Fmetamask.zendesk.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043227612-How-to-add-a-custom-network-RPC)\n\n## Resetting an Account in Metamask\n\n```\nMetaMask - RPC Error:\n[ethjs-query] while formatting ouputs from RPC '{\"value\":{\"code\":-32603,\"data\":{\"code\":-32000,\"message\":\"Nonce too high. Expected nonce to be 2 but got 4. Note that transactions can't be queued when automining.\"}}}'\n```\n\n## Listening for Events and Completed Transactions\n\n- [provider.once](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fapi\u002Fproviders\u002Fprovider\u002F#Provider-once)\n- [Anonymous function](https:\u002F\u002Fwww.geeksforgeeks.org\u002Fjavascript-anonymous-functions\u002F)\n- [Javascript Promise](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FPromise)\n\n## Input Forms\n\n## Reading from the Blockchain\n\n## Withdraw Function\n\n## Lesson 8 Recap\n\n### Optional Links:\n\n- [Browserify](https:\u002F\u002Fbrowserify.org\u002F)\n- [Watchify](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fwatchify)\n\n# Lesson 9: Hardhat Smart Contract Lottery\n\n_[⌨️ (13:41:02) Lesson 9: Hardhat Smart Contract Lottery](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=49262s)_\n\n💻 Code: https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Fhardhat-smartcontract-lottery-fcc\n\n## Introduction\n\n## Hardhat Setup - Smart Contract Lottery\n\n_[⌨️ (13:43:43) Hardhat Setup](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=49423)_\n\n- Install dependencies:\n\n```bash\nyarn add --dev @nomiclabs\u002Fhardhat-ethers@npm:hardhat-deploy-ethers ethers @nomiclabs\u002Fhardhat-etherscan @nomiclabs\u002Fhardhat-waffle chai ethereum-waffle hardhat hardhat-contract-sizer hardhat-deploy hardhat-gas-reporter prettier prettier-plugin-solidity solhint solidity-coverage dotenv\n```\n\n- Install dependencies (Typescript version):\n\n```bash\nyarn add --dev @nomiclabs\u002Fhardhat-ethers@npm:hardhat-deploy-ethers ethers @nomiclabs\u002Fhardhat-etherscan @nomiclabs\u002Fhardhat-waffle chai ethereum-waffle hardhat hardhat-contract-sizer hardhat-deploy hardhat-gas-reporter prettier prettier-plugin-solidity solhint solidity-coverage dotenv @typechain\u002Fethers-v5 @typechain\u002Fhardhat @types\u002Fchai @types\u002Fnode ts-node typechain typescript\n```\n\n## Raffle.sol Setup\n\n_[⌨️ (13:46:55) Raffle.sol Setup](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=49615)_\n\n- [Custom Errors in Solidity](https:\u002F\u002Fblog.soliditylang.org\u002F2021\u002F04\u002F21\u002Fcustom-errors\u002F)\n\n## Introduction to Events\n\n_[⌨️ (13:54:02) Introduction to Events](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=50042)_\n\n- [Events & Logging Video](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=KDYJC85eS5M)\n- [Events & Logging in Hardhat](https:\u002F\u002Fgithub.com\u002FPatrickAlphaC\u002Fhardhat-events-logs)\n\n## Events in Raffle.sol\n\n_[⌨️ (14:00:47) Events in Raffle.sol](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=50447)_\n\n## Introduction to Chainlink VRF\n\n_[⌨️ (14:02:30) Introduction to Chainlink VRF](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=50550)_\n\n- [Special Guest Stephen Fluin](https:\u002F\u002Ftwitter.com\u002Fstephenfluin)\n\n### Sub-Lesson: Chainlink VRF\n\n> - [Chainlink VRFv2 Docs](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Fget-a-random-number\u002F)\n> - [Chainlink VRFv2 Walkthrough](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=rdJ5d8j1RCg)\n> - [Chainlink Contracts](https:\u002F\u002Fgithub.com\u002Fsmartcontractkit\u002Fchainlink\u002Fblob\u002Fdevelop\u002Fcontracts\u002Fsrc\u002Fv0.8\u002FVRFConsumerBase.sol)\n\n## Implementing Chainlink VRF - Introduction\n\n_[⌨️ (14:09:53) Implementing Chainlink VRF](https:\u002F\u002Fyoutu.be\u002FgyMwXuJrbJQ?t=50993)_\n\n### Hardhat Shorthand\n\n- [Hardhat Shorthand](https:\u002F\u002Fhardhat.org\u002Fguides\u002Fshorthand.html)\n\n## Implementing Chainlink VRF - The Request\n\n## Implementing Chainlink VRF - The FulFill\n\n### Modulo\n\n- [Modulo](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Ftypes.html?highlight=modulo#modulo)\n\n## Introduction to Chainlink Keepers\n\n- [Chainlink Keepers Docs](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Fchainlink-keepers\u002Fintroduction\u002F)\n- [Chainlink Keepers Walkthrough](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=-Wkw5JVQGUo)\n\n## Implementing Chainlink Keepers - checkUpkeep\n\n### Enums\n\n- [Enum](https:\u002F\u002Fdocs.soliditylang.org\u002Fen\u002Flatest\u002Fstructure-of-a-contract.html?highlight=enum#enum-types)\n\n## Implementing Chainlink Keepers - checkUpkeep continued\n\n- block.timestamp\n\n## Implementing Chainlink Keepers - performUpkeep\n\n## Code Cleanup\n\n## Deploying Raffle.sol\n\n### Mock Chainlink VRF Coordinator\n\n### Continued\n\n- [LINK Token](https:\u002F\u002Fdocs.chain.link\u002Fdocs\u002Flink-token-contracts\u002F)\n\n## Raffle.sol Unit Tests\n\n- We use `async function` in the describe blocks at the start, but we correctly take them out later.\n\n### Testing Events & Chai Matchers\n\n- [Emit Chai Matcher](https:\u002F\u002Fethereum-waffle.readthedocs.io\u002Fen\u002Flatest\u002Fmatchers.html#emitting-events)\n\n### Continued I\n\n## Hardhat Methods & Time Travel\n\n- [Make Hardhat do whatever you want it to](https:\u002F\u002Fhardhat.org\u002Fhardhat-network\u002Freference\u002F)\n- [Special debugging hardhat methods](https:\u002F\u002Fhardhat.org\u002Fhardhat-network\u002Freference\u002F#special-testing-debugging-methods)\n\n### Continued II\n\n## Callstatic\n\n- [Callstatic](https:\u002F\u002Fdocs.ethers.io\u002Fv5\u002Fapi\u002Fcontract\u002Fcontract\u002F#contract-callStatic)\n\n### Continued III\n\n### Massive Promise Test\n\n### Continued IV\n\n## Raffle.sol Staging Tests\n\n## Testing on a Testnet\n\n### Recommended LINK amounts for Sepolia Staging Test:\n\n- Chainlink VRF: 2 LINK\n- Chainlink Keepers: 8 LINK\n\n## Conclusion\n\n## Typescript - Smart Contract Lottery\n\n🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊 Completed Hardhat Basics! 🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊🎊\n\n# Lesson 10: NextJS Smart Contract Lottery (Full Stack \u002F Front End)\n\n_[⌨️ (16:34:07) Lesson 10: NextJS Smart Contract Lottery (Full Stack \u002F Front End)](https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=gyMwXuJrbJQ&t=59647s)_\n\n💻 Code: https:\u002F\u002Fgithub.com","该项目提供了一个从入门到精通的Web3、全栈Solidity和智能合约开发课程，使用JavaScript进行教学。其核心功能包括区块链基础、Solidity编程、智能合约开发及部署等，并涵盖了Alchemy、Chainlink、DAO、DeFi等多个主题。技术特点上，项目利用了Hardhat、IPFS、Moralis、Next.js、OpenZeppelin、ReactJS等工具和技术栈来构建应用。尽管当前版本因Hardhat工具链更新而不再积极维护，但它依然适合希望学习区块链技术和智能合约开发的学生或开发者作为初步了解和实践的资源。",2,"2026-06-11 03:28:45","top_topic"]