Skip to content

Everything related to my progress through the Full Blockchain, Solidity & Full-Stack Web3 development with JavaScript by Patrick Collins.

License

Notifications You must be signed in to change notification settings

0xpolarzero/full-blockchain-solidity-course-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


Logo

Full Blockchain, Solidity & Full-Stack Web3 development with JavaScript

Everything related to my progress through this course from Patrick Collins
Go to the video »


Table of Contents
  1. About The Project
  2. Trying out / testing
  3. Lessons
  4. License
  5. Contact

About The Project

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!

Solidity JavaScript Hardhat EthersJS Ganache Remix Rainbow Wagmi TheGraph ApolloGraphQL Chainlink Moralis Alchemy Aave IPFS ReactJS NextJS NodeJS Remix

Trying out / testing

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.

Installation

  1. Clone the repo:
    git clone https://github.com/0xpolarzero/full-blockchain-solidity-course-js.git
  2. Navigate into a subdirectory:
    cd name-of-the-subdirectory
  3. Install NPM packages using yarn or npm install.

Usage

Deploy:

yarn hardhat deploy

Run tests:

yarn hardhat test

Test coverage:

yarn hardhat coverage

Lessons

Achievements

  • 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

Skills

Solidity Remix Chainlink

Achievements

  • 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

Skills

Solidity JavaScript Ganache EthersJS NodeJS Alchemy

Achievements

  • 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

Skills

Solidity JavaScript Hardhat Chai Mocha

Achievements

  • 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

Skills

Solidity JavaScript Hardhat Chai Mocha Chainlink

Achievements

  • Implement a minimalistic Front End for the FundMe contract
  • Using Ethers.js to interact with MetaMask
  • Listening for events & transactions with Promise and provider.once

Skills

Solidity JavaScript EthersJS

Achievements

  • 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

Skills

Solidity JavaScript Hardhat Chai Mocha Chainlink

Achievements

  • 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

Skills

Solidity JavaScript ReactJS NextJS Moralis IPFS

Achievements

  • Creating an ERC20 Token with the basic requirements
  • Using Openzeppelin to create the token
  • Usual unit testing for the inherited functions

Skills

Solidity JavaScript Hardhat Chai Mocha

Achievements

  • 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

Skills

Solidity JavaScript Hardhat Chai Mocha Aave

Achievements

  • 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

Skills

Solidity JavaScript Hardhat Chai Mocha Chainlink Pinata

Achievements

  • 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

Bonus achievements

  • Deploying the marketplace & NFT contracts to Polygon (Mumbai) & Arbitrum (Goerli) (cf. Mission 12)

Skills

Solidity JavaScript Hardhat Chai Mocha

Achievements

  • 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

Skills

Solidity JavaScript ReactJS NextJS Moralis

Achievements

Bonus achievements

  • 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)

Skills

Solidity JavaScript ReactJS NextJS Rainbow Wagmi TheGraph ApolloGraphQL GraphQL Antd

Achievements

  • 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

Skills

Solidity JavaScript Hardhat

Achievements

  • 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

Skills

Solidity TypeScript Hardhat

Achievements

  • 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

Skills

Solidity JavaScript Hardhat

Introduced to security & auditing tools:

OpenZeppelin Python Docker Slither Echnida

License

Distributed under the MIT License. See LICENSE.txt for more information.

Contact - Social

Website Twitter LinkedIn Hashnode
0xpolarzero@gmail.com polarzero.eth

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!

(back to top)