Everything related to my progress through this course from Patrick Collins
Go to the video »
Table of Contents
- About The Project
- Trying out / testing
-
Lessons
- Mission 00: Remix & Solidity Basics
- Mission 01: Ethers - Simple Storage
- Mission 02: Hardhat - Simple Storage
- Mission 03: Hardhat - Fund Me
- Mission 04: HTML - Fund Me
- Mission 05: Hardhat - Lottery Smart Contract
- Mission 06: Next.js Front End - Lottery Smart Contract
- Mission 07: Hardhat - ERC20 Token
- Mission 08: DeFi
- Mission 09: NFT - IPFS, fully on-chain, randomized, dynamic...
- Mission 10: Hardhat - NFT Marketplace
- Mission 11: Next.js & Moralis - NFT Marketplace
- Mission 12: Next.js & TheGraph - NFT Marketplace
- Mission 13: Hardhat - Upgrades
- Mission 14: Hardhat - DAOs
- Mission 15: Hardhat - Security & Auditing
- License
- Contact
While following this course, I frequently pushed my progress to GitHub, to keep track of it. The purpose of this resource is to document this growth, providing details at each step of the journey about the mission achieved, and the new skills acquired. Enjoy the glow up!
To get a local copy up and running follow these simple example steps.
You will need to install either npm or yarn to run the commands, and git to clone the repository.
- Clone the repo:
git clone https://github.com/0xpolarzero/full-blockchain-solidity-course-js.git
- Navigate into a subdirectory:
cd name-of-the-subdirectory
- Install NPM packages using
yarn
ornpm install
.
Deploy:
yarn hardhat deploy
Run tests:
yarn hardhat test
Test coverage:
yarn hardhat coverage
- Writing a basic smart contract with Solidity
- Compiling & Deploying the contract (VM or testnet)
- Interacting between contracts
- Interacting with the contract after it's deployed
- Using Chainlink for price feeds
- Working in a local environment
- Using Ganache to simulate a blockchain
- Using Ethers.js to interact with a contract
- Private key management, key encryption
- Using Alchemy RPC & Dashboard
- Using the Hardhat framework
- Deploying contracts
- Using networks (Hardhat node, testnet)
- Verifying a contract with Etherscan
- Interacting with contracts
- Custom tasks & scripts
- Testing with Mocha & Chai, tracking Solidity coverage
- Using the gas reporter
- Deploying multiple/selected contracts with Hardhat
- Mocking a Chainlink price feed for testing
- Unit & Staging tests
- Interacting with storage in Solidity
- Gas optimization, using storage, immutable & constant variables
- Implement a minimalistic Front End for the FundMe contract
- Using Ethers.js to interact with MetaMask
- Listening for events & transactions with
Promise
andprovider.once
- Write a provably fair raffle system using RNG with Chainlink VRF & Chainlink Keepers
- Using & testing Solidity Events
- Using
evm_increaseTime
&evm_mine
with Hardhat, special methods - More in depth staging tests
- Using Next.js to build a Front End for the lottery smart contract
- Using Moralis & React hooks to pass data/events through components
- Writing to/reading local storage to keep track of wallets connected
- Using web3uikit to connect a wallet to the provider & dispatch notifications about transactions
- Basic styling with TailwindCSS
- Hosting the website on IPFS
- Directly pinning the website to a node
- Using Fleek to host on IPFS & Filecoin
- Creating an ERC20 Token with the basic requirements
- Using Openzeppelin to create the token
- Usual unit testing for the inherited functions
- Using scripts for borrowing & lending with Aave
- Using the wETH token contract to exchange ETH for wETH
- Depositing wETH into Aave
- Borrowing DAI from Aave
- Repaying DAI to Aave
- Forking mainnet with Hardhat
- Deploying an ERC721 token & hosting the image on IPFS
- Getting the data to be pinned with Pinata & upload the images URIs
- Using Chainlink VRF to issue a verifiable random rarity when the NFT is minted
- Deploy a smart contract to dynamically generate the NFT URI, based on on-chain price feeds
- Base64 Encoding/Decoding
- EVM opcodes, encoding & calling functions directly from contract
- Creating a marketplace for NFTs based on the ERC721 standard
- Pull over push considerations, reentrancy attacks
- Advanced events & modifiers, security improvements
- Writing various scripts to interact with the contract
- Deploying the marketplace & NFT contracts to Polygon (Mumbai) & Arbitrum (Goerli) (cf. Mission 12)
- Connecting Moralis to a local hardhat node
- Using Moralis CLI & Cloud fonctions, triggers & hooks
- Moralis queries, fetching URIs & rendering the NFT images
- Building a front end for buying, listing (updating, canceling) NFTs & witdrawing funds
- Building a subgraph to index the marketplace contract events (The Graph Studio)
- Using The Graph CLI to deploy the subgraph
- Querying the subgraph with GraphQL & Apollo client
- Hosting the Marketplace:
- Using Rainbowkit & Wagmi to interact with the blockchain (Wallet connection & transactions with the smart contract)
- Displaying 3 different marketplace listing pages for the chains it's deployed on (Polygon, Arbitrum & Ethereum testnets)
- Deploying 3 different subgraphs with The Graph Studio & Hosted Services on these 3 networks
- Handling notifications: success, error & displaying pending transactions with React-Toastify
- Building a minting page for the NFT that can be listed
- Customizing the UI & UX
- Using Antd Design for various components (Modal, Button, Input) & Skeleton for loading cards
- Listings filtering (All & Owned by the user)
- Overview of the different ways to upgrade a contract (directly through parameters, social migration, proxy)
- Manually upgrading a contract with Hardhat
- Using the OpenZeppelin Upgrades plugin to deploy & upgrade a smart contract
- Proxies & Implementations,
delegatecall
, storage & function selector clashes - Proxy patterns: Transparent, Upgradeable (UUPS), Diamond
- Building a fully on-chain DAO with a governance token (ERC20) & a voting contract (ERC20)
- The Compound Governance model & OpenZeppelin Contract Wizard:
- Governance token & Proxy contract
- The Implementation
- A
TimeLock
contract to hold the Governance contract for a certain amount of time
- Going through the usual auditing process
- Running some preliminary tests with fast & slow tools
- Slither to expose major vulnerabilities (reentrancy, integer overflow...)
- Fuzzing with Echidna & using Docker to run a bundle of tools
- Known attacks & best practices to avoid them
Introduced to security & auditing tools:
Distributed under the MIT License. See LICENSE.txt
for more information.
Project Link: https://github.com/0xpolarzero/full-blockchain-solidity-course-js
A deep appreciation goes to Patrick Collins for this free and thorough course. Thank you!