An open API service indexing awesome lists of open source software.

https://github.com/0xpolarzero/full-blockchain-solidity-course-js

Everything related to my progress through the Full Blockchain, Solidity & Full-Stack Web3 development with JavaScript by Patrick Collins.
https://github.com/0xpolarzero/full-blockchain-solidity-course-js

aave alchemy blockchain chainlink chainlink-oracle ethereum ethersjs ganache hardhat ipfs javascript mocha-chai moralis nextjs nodejs react smart-contracts solidity thegraph web3

Last synced: 5 months ago
JSON representation

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

Awesome Lists containing this project

README

          





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:
```sh
git clone https://github.com/0xpolarzero/full-blockchain-solidity-course-js.git
```
2. Navigate into a subdirectory:
```sh
cd name-of-the-subdirectory
```
3. Install NPM packages using `yarn` or `npm install`.

## Usage

Deploy:

```sh
yarn hardhat deploy
```

Run tests:

```sh
yarn hardhat test
```

Test coverage:

```sh
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]](https://soliditylang.org/)
[![Remix]](https://remix.ethereum.org/)
[![Chainlink]](https://chain.link/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![Ganache]](https://trufflesuite.com/ganache/)
[![EthersJS]](https://docs.ethers.io/v5/)
[![NodeJS]](https://nodejs.org/)
[![Alchemy]](https://www.alchemy.com/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![Hardhat]](https://hardhat.org/)
[![Chai]](https://www.chaijs.com/)
[![Mocha]](https://mochajs.org/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![Hardhat]](https://hardhat.org/)
[![Chai]](https://www.chaijs.com/)
[![Mocha]](https://mochajs.org/)
[![Chainlink]](https://chain.link/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![EthersJS]](https://docs.ethers.io/v5/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![Hardhat]](https://hardhat.org/)
[![Chai]](https://www.chaijs.com/)
[![Mocha]](https://mochajs.org/)
[![Chainlink]](https://chain.link/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![ReactJS]](https://reactjs.org/)
[![NextJS]](https://nextjs.org/)
[![Moralis]](https://moralis.io/)
[![IPFS]](https://ipfs.tech/)

#

### Achievements

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

### Skills

[![Solidity]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![Hardhat]](https://hardhat.org/)
[![Chai]](https://www.chaijs.com/)
[![Mocha]](https://mochajs.org/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![Hardhat]](https://hardhat.org/)
[![Chai]](https://www.chaijs.com/)
[![Mocha]](https://mochajs.org/)
[![Aave]](https://developer.mozilla.org/fr/docs/Web/JavaScript)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![Hardhat]](https://hardhat.org/)
[![Chai]](https://www.chaijs.com/)
[![Mocha]](https://mochajs.org/)
[![Chainlink]](https://chain.link/)
[![Pinata]](https://www.pinata.cloud/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![Hardhat]](https://hardhat.org/)
[![Chai]](https://www.chaijs.com/)
[![Mocha]](https://mochajs.org/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![ReactJS]](https://reactjs.org/)
[![NextJS]](https://nextjs.org/)
[![Moralis]](https://moralis.io/)

#

### Achievements

- 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:
- Fleek (IPFS): https://calm-forest-4357.on.fleek.co/
- Vercel: https://nextjs-nft-marketplace-thegraph-murex.vercel.app/

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![ReactJS]](https://reactjs.org/)
[![NextJS]](https://nextjs.org/)
[![Rainbow]](https://www.rainbowkit.com/)
[![Wagmi]](https://wagmi.sh/)
[![TheGraph]](https://thegraph.com/en/)
[![ApolloGraphQL]](https://www.apollographql.com/)
[![GraphQL]](https://graphql.org/)
[![Antd]](https://ant.design/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![Hardhat]](https://hardhat.org/)

#

### 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]](https://soliditylang.org/)
[![TypeScript]](https://www.typescriptlang.org/)
[![Hardhat]](https://hardhat.org/)

#

### 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]](https://soliditylang.org/)
[![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript)
[![Hardhat]](https://hardhat.org/)

Introduced to security & auditing tools:

[![OpenZeppelin]](https://openzeppelin.com/)
[![Python]](https://www.python.org/)
[![Docker]](https://www.docker.com/)
[![Slither]](https://github.com/crytic/slither)
[![Echnida]](https://github.com/crytic/echidna)

# License

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

# Contact - Social

[![Website][website]](https://polarzero.xyz/)
[![Twitter][twitter]](https://twitter.com/0xpolarzero/)
[![LinkedIn][linkedin]](https://www.linkedin.com/in/antton-lepretre/)
[![Hashnode][hashnode]](https://polarzero.hashnode.dev/)

[![0xpolarzero@gmail.com][email]](mailto:0xpolarzero@gmail.com)
[![polarzero.eth][ethereum]](https://opensea.io/polarzero)

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)

[website]: https://img.shields.io/badge/website-000000?style=for-the-badge&logo=About.me&logoColor=white
[twitter]: https://img.shields.io/badge/Twitter-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white
[linkedin]: https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white
[hashnode]: https://img.shields.io/badge/Hashnode-2962FF?style=for-the-badge&logo=hashnode&logoColor=white
[email]: https://img.shields.io/badge/0xpolarzero@gmail.com-D14836?style=for-the-badge&logo=gmail&logoColor=white
[ethereum]: https://img.shields.io/badge/polarzero.eth-3C3C3D?style=for-the-badge&logo=Ethereum&logoColor=white
[solidity]: https://custom-icon-badges.demolab.com/badge/Solidity-3C3C3D?style=for-the-badge&logo=solidity&logoColor=white
[remix]: https://custom-icon-badges.demolab.com/badge/Remix-222335?style=for-the-badge&logo=remix-min&logoColor=white
[chainlink]: https://img.shields.io/badge/Chainlink-375BD2.svg?style=for-the-badge&logo=Chainlink&logoColor=white
[javascript]: https://img.shields.io/badge/JavaScript-F7DF1E.svg?style=for-the-badge&logo=JavaScript&logoColor=black
[nodejs]: https://img.shields.io/badge/Node.js-339933.svg?style=for-the-badge&logo=nodedotjs&logoColor=white
[ganache]: https://custom-icon-badges.demolab.com/badge/Ganache-201F1E?style=for-the-badge&logo=ganache
[ethersjs]: https://custom-icon-badges.demolab.com/badge/Ethers.js-29349A?style=for-the-badge&logo=ethers&logoColor=white
[alchemy]: https://custom-icon-badges.demolab.com/badge/Alchemy-2356D2?style=for-the-badge&logo=alchemy&logoColor=white
[hardhat]: https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat
[chai]: https://img.shields.io/badge/Chai-A30701.svg?style=for-the-badge&logo=Chai&logoColor=white
[mocha]: https://custom-icon-badges.demolab.com/badge/Mocha-87694D?style=for-the-badge&logo=mocha&logoColor=white
[reactjs]: https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB
[nextjs]: https://img.shields.io/badge/next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white
[ipfs]: https://img.shields.io/badge/IPFS-0A1B2B?style=for-the-badge&logo=ipfs
[moralis]: https://custom-icon-badges.demolab.com/badge/Moralis-2559BB?style=for-the-badge&logo=moralis
[aave]: https://custom-icon-badges.demolab.com/badge/Aave-1C202F?style=for-the-badge&logo=aave
[pinata]: https://custom-icon-badges.demolab.com/badge/Pinata-350462?style=for-the-badge&logo=pinata
[rainbow]: https://custom-icon-badges.demolab.com/badge/Rainbowkit-032463?style=for-the-badge&logo=rainbow
[wagmi]: https://custom-icon-badges.demolab.com/badge/Wagmi-1C1B1B?style=for-the-badge&logo=wagmi
[antd]: https://img.shields.io/badge/Ant%20Design-0170FE.svg?style=for-the-badge&logo=Ant-Design&logoColor=white
[thegraph]: https://custom-icon-badges.demolab.com/badge/TheGraph-0C0A1C?style=for-the-badge&logo=thegraph&logoColor=white
[apollographql]: https://img.shields.io/badge/Apollo%20GraphQL-311C87.svg?style=for-the-badge&logo=Apollo-GraphQL&logoColor=white
[graphql]: https://img.shields.io/badge/GraphQL-E10098.svg?style=for-the-badge&logo=GraphQL&logoColor=white
[typescript]: https://img.shields.io/badge/TypeScript-007ACC.svg?style=for-the-badge&logo=TypeScript&logoColor=white
[openzeppelin]: https://img.shields.io/badge/OpenZeppelin-4E5EE4.svg?style=for-the-badge&logo=OpenZeppelin&logoColor=white
[python]: https://img.shields.io/badge/Python-3776AB.svg?style=for-the-badge&logo=Python&logoColor=white
[docker]: https://img.shields.io/badge/Docker-2496ED.svg?style=for-the-badge&logo=Docker&logoColor=white
[slither]: https://custom-icon-badges.demolab.com/badge/Slither-181B22?style=for-the-badge&logo=slither
[echnida]: https://custom-icon-badges.demolab.com/badge/Echnida-181B22?style=for-the-badge&logo=echnida