├── images ├── chai.png ├── ipfs.png ├── apollo.png ├── moralis.png ├── ethersjs.png ├── solidity.svg ├── chainlink.svg ├── thegraph.svg ├── javascript.svg ├── nextjs.svg ├── wagmi.svg ├── react.svg ├── remix.svg ├── rainbow.svg ├── ethereum.svg ├── mocha.svg ├── hardhat.svg ├── blockchain.svg ├── nodejs.svg ├── alchemy.svg ├── ganache.svg └── aave.svg ├── 10-web3-nft-marketplace-graph └── README.md ├── 06-web3-erc20-hardhat └── README.md ├── 00-solidity-basics └── README.md ├── 01-solidity-ethersjs └── README.md ├── 07-web3-defi-hardhat └── README.md ├── 05-web3-lottery-nextjs └── README.md ├── 13-web3-daos-hardhat └── README.md ├── 02-solidity-hardhat └── README.md ├── 12-web3-upgrade-contracts-hardhat └── README.md ├── 03-solidity-hardhat-advanced └── README.md ├── 08-web3-nft-hardhat └── README.md ├── 09-web3-nft-marketplace-hardhat └── README.md ├── 04-web3-lottery-hardhat └── README.md ├── 11-web3-nft-marketplace-nextjs-thegraph └── README.md ├── 14-web3-security-hardhat └── README.md └── README.md /images/chai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcraftcode/web3-blockchain-solidity-course-js/HEAD/images/chai.png -------------------------------------------------------------------------------- /images/ipfs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcraftcode/web3-blockchain-solidity-course-js/HEAD/images/ipfs.png -------------------------------------------------------------------------------- /images/apollo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcraftcode/web3-blockchain-solidity-course-js/HEAD/images/apollo.png -------------------------------------------------------------------------------- /images/moralis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcraftcode/web3-blockchain-solidity-course-js/HEAD/images/moralis.png -------------------------------------------------------------------------------- /images/ethersjs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kcraftcode/web3-blockchain-solidity-course-js/HEAD/images/ethersjs.png -------------------------------------------------------------------------------- /images/solidity.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/chainlink.svg: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /images/thegraph.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /images/javascript.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/nextjs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/wagmi.svg: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 20 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /images/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/remix.svg: -------------------------------------------------------------------------------- 1 | remix_logo1text 27 | -------------------------------------------------------------------------------- /10-web3-nft-marketplace-graph/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-10 22 |

23 | 24 | View Code · 25 | View 26 | Front End Code · 27 | Check 28 | My Full Journey 29 | 30 |
31 | 32 |
33 | 34 |

35 | view marketplace app in action 36 |

37 | 38 |
39 | 40 | 41 | 42 | ## Getting Started 43 | 44 | 1. Clone the repo 45 | 46 | ```sh 47 | git clone https://github.com/levblanc/web3-nft-marketplace-graph.git 48 | ``` 49 | 50 | 2. Install dependencies with `yarn install` or `npm install` 51 | 52 | 3. Generate classes for graphql schema & marketplace contract 53 | 54 | ```zsh 55 | graph codegen 56 | ``` 57 | 58 | 4. Build for deploying subgraph 59 | 60 | ```zsh 61 | graph build 62 | ``` 63 | 64 | Other available commands in `package.json`. 65 | 66 | ## Skills 67 | 68 | - [![TheGraph]](https://thegraph.com/en/) 69 | - [![GraphQL]](https://graphql.org/) 70 | 71 | ## Roadmap 72 | 73 | - [x] Setup subgraph env 74 | - [x] Build a subgraph to handle the events emit from NFT marketplace contract 75 | - [x] Deploy to Subgraph Studio on The Graph 76 | 77 | # 78 | 79 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 80 | 81 | 82 | 83 | 84 | [thegraph]: 85 | https://custom-icon-badges.demolab.com/badge/TheGraph-0C0A1C?style=for-the-badge&logo=thegraph&logoColor=white 86 | [graphql]: 87 | https://img.shields.io/badge/GraphQL-E10098.svg?style=for-the-badge&logo=GraphQL&logoColor=white 88 | -------------------------------------------------------------------------------- /06-web3-erc20-hardhat/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-06 22 |

23 | 24 | View Code · 25 | Check 26 | My Full Journey 27 | 28 |
29 | 30 |
31 | 32 | 33 | 34 | ## Getting Started 35 | 36 | 1. Clone the repo 37 | 38 | ```sh 39 | git clone https://github.com/levblanc/web3-erc20-hardhat.git 40 | ``` 41 | 42 | 2. Install dependencies with `yarn install` or `npm install` 43 | 44 | ## Skills 45 | 46 | - [![Solidity]](https://soliditylang.org/) 47 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 48 | - [![Hardhat]](https://hardhat.org/) 49 | - [![Chai]](https://www.chaijs.com/) 50 | - [![Mocha]](https://mochajs.org/) 51 | 52 | 53 | 54 | ## Roadmap 55 | 56 | - [x] Create ERC20 token manually, refering to 57 | - tutorial on ethereum.org 58 | - OpenZeppelin 59 | - [x] Create ERC20 token with OpenZeppelin template 60 | 61 | ## References: 62 | 63 | 1. EIP-20 official doc: https://eips.ethereum.org/EIPS/eip-20 64 | 2. https://ethereum.org/en/developers/tutorials/understand-the-erc-20-token-smart-contract/ 65 | 3. https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol 66 | 4. https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol 67 | 68 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 69 | 70 | 71 | 72 | 73 | [solidity]: 74 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 75 | [javascript]: 76 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 77 | [hardhat]: 78 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 79 | [chai]: https://img.shields.io/badge/Chai-94161F?style=for-the-badge&logo=Chai 80 | [mocha]: 81 | https://custom-icon-badges.demolab.com/badge/Mocha-8D6748?style=for-the-badge&logo=mocha&logoColor=white 82 | -------------------------------------------------------------------------------- /00-solidity-basics/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-00 22 |

23 | 24 | View Code · 25 | Check 26 | My Full Journey 27 | 28 |
29 | 30 |
31 | 32 | 33 | 34 | ## Getting Started 35 | 36 | Smart contracts in this repo can be compiled, deploy and interact inside 37 | Remix IDE. 38 | 39 | ```sh 40 | git clone https://github.com/levblanc/solidity-basics.git 41 | ``` 42 | 43 | ## Skills 44 | 45 | - [![Solidity]](https://soliditylang.org/) 46 | - [![Chainlink]](https://chain.link/) 47 | - [![Remix]](https://remix.ethereum.org/) 48 | 49 | 50 | 51 | ## Roadmap 52 | 53 | - [x] How does blockchain work 54 | - [x] Smart contract related terminologies 55 | - [x] Introduction to gas 56 | - [x] Signing transactions 57 | - [x] Basic Solidity - Types 58 | - [x] Basic Solidity - Functions 59 | - [x] Basic Solidity - Arrays & Structs 60 | - [x] Basic Solidity - Errors & Warnings 61 | - [x] Basic Solidity - Memory, Storage & Calldata(Intro) 62 | - [x] Basic Solidity - Mappings 63 | - [x] Deploying your First Contract 64 | - [x] Basic Solidity - Importing contracts into other Contracts 65 | - [x] Basic Solidity - Interacting with other contracts 66 | - [x] Basic Solidity - Inheritance & Overrides 67 | - [x] Basic Solidity - Sending Eth Through A function & Reverts 68 | - [x] Chainlink & Oracles 69 | - [x] Sending ETH And working with Chainlink 70 | - [x] Basic Solidity - interfaces & Chainlink Price Feeds 71 | - [x] Basic Solidity - Floating Point Math 72 | - [x] Basic Solidity - Libraries 73 | - [x] Basic Solidity - SafeMath, Overflow Checking, and the "unchecked" keyword 74 | - [x] Basic Solidity - For Loop 75 | - [x] Basic Solidity - Resetting an Array 76 | - [x] Basic Solidity - Sending ETH from a Contract 77 | - [x] Basic Solidity - Constructor 78 | - [x] Basic Solidity - Modifiers 79 | - [x] Advanced Solidity - Immutable & Constant 80 | - [x] Advanced Solidity - Custom Errors 81 | - [x] Advanced Solidity - Receive & Fallback 82 | 83 | # 84 | 85 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 86 | 87 | 88 | 89 | 90 | [solidity]: 91 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 92 | [chainlink]: 93 | https://img.shields.io/badge/chainlink-375bd2?style=for-the-badge&logo=chainlink 94 | [remix]: 95 | https://img.shields.io/badge/remix%20IDE-181E29?style=for-the-badge&logo=ethereum 96 | -------------------------------------------------------------------------------- /images/rainbow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /01-solidity-ethersjs/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-01 22 |

23 | 24 | View Code 25 | (Javascript) · 26 | View 27 | Code (Typescript) · 28 | Check 29 | My Full Journey 30 | 31 |
32 | 33 |
34 | 35 | 36 | 37 | ## Getting Started 38 | 39 | 1. Clone the repo 40 | 41 | ```sh 42 | git clone https://github.com/levblanc/solidity-ethersjs.git 43 | ``` 44 | 45 | 2. Install dependencies with `yarn install` or `npm install` 46 | 47 | 3. Create a `.env` file under project's root directory 48 | 49 | ```.env 50 | PRIVATE_KEY=private_key_of_your_wallet 51 | RPC_URL=rpc_url_from_provider 52 | PRIVATE_KEY_PASSWORD=your_password 53 | ``` 54 | 55 | ## Skills 56 | 57 | - [![Solidity]](https://soliditylang.org/) 58 | - [![EthersJS]](https://docs.ethers.io/v5/) 59 | - [![Ganache]](https://trufflesuite.com/ganache/) 60 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 61 | - [![TypeScript]](https://www.typescriptlang.org/) 62 | - [![NodeJS]](https://nodejs.org/) 63 | - [![Alchemy]](https://www.alchemy.com/) 64 | 65 | 66 | 67 | ## Roadmap 68 | 69 | - [x] Installation & Setup - Local Development Introduction 70 | - [x] Ganache & Networks 71 | - [x] Introduction to Ethers.js 72 | - [x] Adding Transaction Overrides 73 | - [x] Transaction Receipts 74 | - [x] Sending a "raw" transaction in ethersjs 75 | - [x] Interacting with Contracts in Ethersjs 76 | - [x] Environment Variables 77 | - [x] Deploying to a Testnet or a Mainnet 78 | - [x] Verifying on Block Explorers (From the UI) 79 | 80 | # 81 | 82 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 83 | 84 | 85 | 86 | 87 | [solidity]: 88 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 89 | [javascript]: 90 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 91 | [typescript]: 92 | https://img.shields.io/badge/typescript-3178C6?style=for-the-badge&logo=typescript&logoColor=white 93 | [nodejs]: 94 | https://img.shields.io/badge/node.js-339933?style=for-the-badge&logo=nodedotjs&logoColor=white 95 | [ganache]: 96 | https://custom-icon-badges.demolab.com/badge/Ganache-201F1E?style=for-the-badge&logo=ganache 97 | [ethersjs]: 98 | https://custom-icon-badges.demolab.com/badge/Ethers.js-29349A?style=for-the-badge&logo=ethers&logoColor=white 99 | [alchemy]: 100 | https://custom-icon-badges.demolab.com/badge/Alchemy-2356D2?style=for-the-badge&logo=alchemy&logoColor=white 101 | -------------------------------------------------------------------------------- /images/ethereum.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /07-web3-defi-hardhat/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-07 22 |

23 | 24 | View Code · 25 | Check 26 | My Full Journey 27 | 28 |
29 | 30 |
31 | 32 | 33 | 34 | ## Getting Started 35 | 36 | 1. Clone the repo 37 | 38 | ```sh 39 | git clone https://github.com/levblanc/web3-defi-hardhat.git 40 | ``` 41 | 42 | 2. Install dependencies with `yarn install` or `npm install` 43 | 44 | 3. Create a `.env` file under project's root directory 45 | 46 | ```.env 47 | PRIVATE_KEY=private_key_of_your_wallet 48 | ETHERSCAN_API_KEY=your_etherscan_api_key 49 | GOERLI_RPC_URL=rpc_url_from_provider 50 | ETHEREUM_MAINNET_RPC_URL=rpc_url_from_provider 51 | ``` 52 | 53 | 54 | 55 | ## Usage 56 | 57 | Run the borrow command: 58 | 59 | ```zsh 60 | yarn borrow 61 | ``` 62 | 63 | This script will: 64 | 65 | 1. Deposit collateral: ETH / WETH 66 | 2. Borrow another asset: DAI 67 | 3. Repay the DAI 68 | 69 | Lint Solidity files 70 | 71 | ```zsh 72 | # Lint only 73 | yarn lint 74 | 75 | # Lint & fix 76 | yarn lint:fix 77 | ``` 78 | 79 | Code formatting 80 | 81 | ```zsh 82 | yarn format 83 | ``` 84 | 85 | ## Skills 86 | 87 | - [![Solidity]](https://soliditylang.org/) 88 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 89 | - [![Hardhat]](https://hardhat.org/) 90 | - [![Chai]](https://www.chaijs.com/) 91 | - [![Mocha]](https://mochajs.org/) 92 | - [![Aave]](https://aave.com/) 93 | 94 | 95 | 96 | ## Roadmap 97 | 98 | - [x] What is an ERC? What is an EIP? 99 | - [x] What is am ERC20? 100 | - [x] Creating an ERC20 Token with Openzeppelin 101 | - [x] what is DeFi? 102 | - [x] What is Aave? 103 | - [x] Programatic Borrowing & Lending 104 | - [x] WETH Wrapped ETH 105 | - [x] Forking Mainnet 106 | - [x] Depositing into Aave 107 | - [x] Borrowing from Aave 108 | - [x] Repaying with Aave 109 | - [x] Visualizing the Transactions (And aTokens) on Etherscan 110 | 111 | # 112 | 113 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 114 | 115 | 116 | 117 | 118 | [solidity]: 119 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 120 | [javascript]: 121 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 122 | [hardhat]: 123 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 124 | [chai]: https://img.shields.io/badge/Chai-94161F?style=for-the-badge&logo=Chai 125 | [mocha]: 126 | https://custom-icon-badges.demolab.com/badge/Mocha-8D6748?style=for-the-badge&logo=mocha&logoColor=white 127 | [aave]: 128 | https://custom-icon-badges.demolab.com/badge/Aave-1C202F?style=for-the-badge&logo=aave 129 | -------------------------------------------------------------------------------- /05-web3-lottery-nextjs/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-05 22 |

23 | 24 | View Code 25 | (Javascript) · 26 | View 27 | Code (Typescript) · 28 | Check 29 | My Full Journey 30 | 31 |
32 | 33 |
34 | 35 | 36 | 37 | ## Getting Started 38 | 39 | 1. Clone the repo 40 | 41 | ```sh 42 | git clone https://github.com/levblanc/web3-lottery-nextjs.git 43 | ``` 44 | 45 | 2. Install dependencies with `yarn install` or `npm install` 46 | 47 | 3. Deploy contracts in 48 | [web3-lottery-hardhat](https://github.com/levblanc/web3-lottery-hardhat) 49 | 50 | ```zsh 51 | # under web3-lottery-hardhat project directory 52 | 53 | # deploy locally 54 | yarn deploy 55 | 56 | # deploy to goerli testnet 57 | yarn deploy:goerli 58 | ``` 59 | 60 | 3. Update contract address in `constants/contractAddresses.json` 61 | 62 | ```zsh 63 | { 64 | "31337": ["localhost_contract_address"], 65 | "5": ["goerli_contract_address"], 66 | } 67 | ``` 68 | 69 | 70 | 71 | ## Usage 72 | 73 | Run the development server: 74 | 75 | ```bash 76 | npm run dev 77 | # or 78 | yarn dev 79 | ``` 80 | 81 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the 82 | result. 83 | 84 | ## Skills 85 | 86 | - [![Solidity]](https://soliditylang.org/) 87 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 88 | - [![ReactJS]](https://reactjs.org/) 89 | - [![NextJS]](https://nextjs.org/) 90 | - [![Moralis]](https://moralis.io/) 91 | - [![IPFS]](https://ipfs.tech/) 92 | 93 | 94 | 95 | ## Roadmap 96 | 97 | - [x] NextJS setup 98 | - [x] Manual Header to understand how `ConnectButton` works 99 | - [x] React Hooks (`useEffect`, `useState`) 100 | - [x] react-moralis hooks & functions (`useMoralis` & `isWeb3Enabled`, 101 | `useWeb3Contract` & `runContractFunction`) 102 | - [x] Automatic Constant Value UI Updater 103 | - [x] web3uikit for easier UI implementation 104 | - [x] Calling Functions in NextJS 105 | - [x] Reading & Displaying Contract Data 106 | - [x] Tailwind & Styling 107 | 108 | # 109 | 110 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 111 | 112 | 113 | 114 | 115 | [solidity]: 116 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 117 | [javascript]: 118 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 119 | [reactjs]: 120 | https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB 121 | [nextjs]: 122 | https://img.shields.io/badge/next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white 123 | [ipfs]: https://img.shields.io/badge/IPFS-0A1B2B?style=for-the-badge&logo=ipfs 124 | [moralis]: 125 | https://custom-icon-badges.demolab.com/badge/Moralis-2559BB?style=for-the-badge&logo=moralis 126 | -------------------------------------------------------------------------------- /13-web3-daos-hardhat/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-13 22 |

23 | 24 | View Code · 25 | Check 26 | My Full Journey 27 | 28 |
29 | 30 |
31 | 32 | 33 | 34 | ## Getting Started 35 | 36 | 1. Clone the repo 37 | 38 | ```sh 39 | git clone https://github.com/levblanc/web3-daos-hardhat.git 40 | ``` 41 | 42 | 2. Install dependencies with `yarn install` or `npm install` 43 | 44 | 3. Create a `.env` file under project's root directory 45 | 46 | ```.env 47 | PRIVATE_KEY=private_key_of_your_wallet 48 | GOERLI_RPC_URL=rpc_url_from_provider 49 | ETHERSCAN_API_KEY=your_etherscan_api_key 50 | ``` 51 | 52 | 53 | 54 | ## Usage 55 | 56 | For local development: 57 | 58 | ```zsh 59 | # compile contracts 60 | yarn compile 61 | 62 | # deploy contract 63 | yarn deploy 64 | ``` 65 | 66 | Propose, vote, queue & execute: 67 | 68 | ```zsh 69 | # In terminal 1: spin up hardhat local node 70 | yarn localhost 71 | 72 | # In terminal 2: run propose script 73 | yarn propose:localhost 74 | 75 | # Run vote script 76 | yarn vote:localhost 77 | 78 | # Run queue-and-execute script 79 | yarn queueAndExecute:localhost 80 | ``` 81 | 82 | Lint Solidity files 83 | 84 | ```zsh 85 | # Lint only 86 | yarn lint 87 | 88 | # Lint & fix 89 | yarn lint:fix 90 | ``` 91 | 92 | Code formatting 93 | 94 | ```zsh 95 | yarn format 96 | ``` 97 | 98 | ## Skills 99 | 100 | - [![Solidity]](https://soliditylang.org/) 101 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 102 | - [![TypeScript]](https://www.typescriptlang.org/) 103 | - [![Hardhat]](https://hardhat.org/) 104 | - [![OpenZeppelin]](https://openzeppelin.com/) 105 | 106 | 107 | 108 | ## Roadmap 109 | 110 | - [x] [What is a DAO](https://www.youtube.com/watch?v=X_QKZzd68ro)? 111 | - [x] Walked thru Compound app's governance process 112 | - [x] Built an on-chain DAO with 113 | - [x] governance token 114 | - [x] governor contract (with 115 | [OpenZeppelin Contracts Wizard](https://docs.openzeppelin.com/contracts/4.x/wizard)) 116 | - [x] timelock contract 117 | 118 | Note: 119 | 120 | - The governor contract holds all key logics: `propose`, `castVoteWithReason`, 121 | `queue` and `execute` 122 | - The timelock contract controls the how long we need to wait (`minDelay`) 123 | before `execute`. Give user time to "get out" if they don't like a governance 124 | update (the proposal). 125 | 126 | 127 | 128 | 129 | [solidity]: 130 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 131 | [javascript]: 132 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 133 | [typescript]: 134 | https://img.shields.io/badge/typescript-3178C6?style=for-the-badge&logo=typescript&logoColor=white 135 | [hardhat]: 136 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 137 | [openzeppelin]: 138 | https://img.shields.io/badge/OpenZeppelin-4E5EE4.svg?style=for-the-badge&logo=OpenZeppelin&logoColor=white 139 | -------------------------------------------------------------------------------- /02-solidity-hardhat/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-02 22 |

23 | 24 | View Code 25 | (Javascript) · 26 | View Code 27 | (Typescript) · 28 | Check 29 | My Full Journey 30 | 31 |
32 | 33 |
34 | 35 | 36 | 37 | ## Getting Started 38 | 39 | 1. Clone the repo 40 | 41 | ```sh 42 | git clone https://github.com/levblanc/solidity-hardhat.git 43 | ``` 44 | 45 | 2. Install dependencies with `yarn install` or `npm install` 46 | 47 | 3. Create a `.env` file under project's root directory 48 | 49 | ```.env 50 | PRIVATE_KEY=private_key_of_your_wallet 51 | GOERLI_RPC_URL=rpc_url_from_provider 52 | PRIVATE_KEY_PASSWORD=your_password 53 | ETHERSCAN_API_KEY=your_etherscan_api_key 54 | ``` 55 | 56 | 57 | 58 | ## Usage 59 | 60 | Spin up a local node with hardhat 61 | 62 | ```zsh 63 | yarn hardhat node 64 | ``` 65 | 66 | Run tests 67 | 68 | ```zsh 69 | yarn hardhat test 70 | ``` 71 | 72 | Check tests coverage 73 | 74 | ```zsh 75 | yarn hardhat coverage 76 | ``` 77 | 78 | [Optional] Generate converage report 79 | 80 | ```js 81 | // hardhat.config.js 82 | module.exports = { 83 | // ... other configs 84 | gasReporter: { 85 | enabled: true, // set to true when needs a report 86 | }, 87 | }; 88 | ``` 89 | 90 | Deploy contract to local network 91 | 92 | ```zsh 93 | yarn hardhat run scripts/deploy.js 94 | ``` 95 | 96 | Deploy contract to Goerli testnet 97 | 98 | ```zsh 99 | yarn hardhat run scripts/deploy.js --network goerli 100 | ``` 101 | 102 | ## Skills 103 | 104 | - [![Solidity]](https://soliditylang.org/) 105 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 106 | - [![TypeScript]](https://www.typescriptlang.org/) 107 | - [![Hardhat]](https://hardhat.org/) 108 | - [![Chai]](https://www.chaijs.com/) 109 | - [![Mocha]](https://mochajs.org/) 110 | 111 | 112 | 113 | ## Roadmap 114 | 115 | - [x] Hardhat Setup 116 | - [x] Deploying SimpleStorage from Hardhat 117 | - [x] Networks in Hardhat 118 | - [x] Programmatic Verification 119 | - [x] Interacting with Contracts in Hardhat 120 | - [x] Custom Hardhat Tasks 121 | - [x] Hardhat Localhost Node 122 | - [x] The Hardhat Console 123 | - [x] Running Tests 124 | - [x] Hardhat Gas Reporter 125 | - [x] Solidity Coverage 126 | 127 | # 128 | 129 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 130 | 131 | 132 | 133 | 134 | [solidity]: 135 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 136 | [javascript]: 137 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 138 | [typescript]: 139 | https://img.shields.io/badge/typescript-3178C6?style=for-the-badge&logo=typescript&logoColor=white 140 | [hardhat]: 141 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 142 | [chai]: https://img.shields.io/badge/Chai-94161F?style=for-the-badge&logo=Chai 143 | [mocha]: 144 | https://custom-icon-badges.demolab.com/badge/Mocha-8D6748?style=for-the-badge&logo=mocha&logoColor=white 145 | -------------------------------------------------------------------------------- /images/mocha.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/hardhat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Hardhat 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /12-web3-upgrade-contracts-hardhat/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-12 22 |

23 | 24 | View 25 | Code · 26 | Check 27 | My Full Journey 28 | 29 |
30 | 31 |
32 | 33 | 34 | 35 | ## Getting Started 36 | 37 | 1. Clone the repo 38 | 39 | ```sh 40 | git clone https://github.com/levblanc/hardhat-upgrade-smart-contracts.git 41 | ``` 42 | 43 | 2. Install dependencies with `yarn install` or `npm install` 44 | 45 | 3. Create a `.env` file under project's root directory 46 | 47 | ```.env 48 | PRIVATE_KEY=private_key_of_your_wallet 49 | GOERLI_RPC_URL=rpc_url_from_provider 50 | ETHERSCAN_API_KEY=your_etherscan_api_key 51 | ``` 52 | 53 | 54 | 55 | ## Usage 56 | 57 | For local development: 58 | 59 | ```zsh 60 | # compile contracts 61 | yarn compile 62 | 63 | # deploy contract 64 | yarn deploy 65 | ``` 66 | 67 | Try Upgrade: 68 | 69 | ```zsh 70 | # In terminal 1: spin up hardhat local node 71 | yarn localhost 72 | 73 | # In terminal 2: run upgrade script 74 | yarn upgrade:local 75 | ``` 76 | 77 | Lint Solidity files 78 | 79 | ```zsh 80 | # Lint only 81 | yarn lint 82 | 83 | # Lint & fix 84 | yarn lint:fix 85 | ``` 86 | 87 | Code formatting 88 | 89 | ```zsh 90 | yarn format 91 | ``` 92 | 93 | ## Skills 94 | 95 | - [![Solidity]](https://soliditylang.org/) 96 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 97 | - [![Hardhat]](https://hardhat.org/) 98 | - [![Chai]](https://www.chaijs.com/) 99 | - [![Mocha]](https://mochajs.org/) 100 | - [![Chainlink]](https://chain.link/) 101 | 102 | 103 | 104 | ## Roadmap 105 | 106 | - [x] Types of Upgrades 107 | - [x] Parameter 108 | - [x] Social Migrate 109 | - [x] Proxy 110 | - [x] Proxy Gotchas 111 | - [x] [Function Collisions](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/#transparent-proxies) 112 | - [x] [Storage Collisions](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/#unstructured-storage) 113 | - [x] Metamorphic Upgrades 114 | - [x] [Transparent](https://blog.openzeppelin.com/the-transparent-proxy-pattern/) 115 | - [x] [UUPS (Universal Upgradable Proxies)](https://forum.openzeppelin.com/t/uups-proxies-tutorial-solidity-javascript/7786) 116 | - [x] [Diamond](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/#diamonds) 117 | 118 | ## Worth to Reads 119 | 120 | 1. [The State of Smart Contract Upgrades](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/) 121 | 2. [OpenZeppelin - Upgrades Plugins](https://docs.openzeppelin.com/upgrades-plugins/1.x/) 122 | 123 | 124 | 125 | 126 | [solidity]: 127 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 128 | [javascript]: 129 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 130 | [hardhat]: 131 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 132 | [chai]: https://img.shields.io/badge/Chai-94161F?style=for-the-badge&logo=Chai 133 | [mocha]: 134 | https://custom-icon-badges.demolab.com/badge/Mocha-8D6748?style=for-the-badge&logo=mocha&logoColor=white 135 | [chainlink]: 136 | https://img.shields.io/badge/chainlink-375bd2?style=for-the-badge&logo=chainlink 137 | -------------------------------------------------------------------------------- /03-solidity-hardhat-advanced/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-03 22 |

23 | 24 | View Code · 25 | Check 26 | My Full Journey 27 | 28 |
29 | 30 |
31 | 32 | 33 | 34 | ## Getting Started 35 | 36 | 1. Clone the repo 37 | 38 | ```sh 39 | git clone https://github.com/levblanc/solidity-hardhat-advanced.git 40 | ``` 41 | 42 | 2. Install dependencies with `yarn install` or `npm install` 43 | 44 | 3. Create a `.env` file under project's root directory 45 | 46 | ```.env 47 | PRIVATE_KEY=private_key_of_your_wallet 48 | GOERLI_RPC_URL=rpc_url_from_provider 49 | ETHERSCAN_API_KEY=your_etherscan_api_key 50 | ``` 51 | 52 | 53 | 54 | ## Usage 55 | 56 | For local development: 57 | 58 | ```zsh 59 | # spin up hardhat local node 60 | yarn localhost 61 | 62 | # deploy contract 63 | yarn deploy 64 | 65 | # Run `fund` function 66 | yarn fund:local 67 | 68 | # Run `withdraw` function 69 | yarn withdraw:local 70 | ``` 71 | 72 | For Goerli testnet: 73 | 74 | ```zsh 75 | # deploy contract to Goerli 76 | yarn deploy:goerli 77 | 78 | # Run `fund` function 79 | yarn fund:goerli 80 | 81 | # Run `withdraw` function 82 | yarn withdraw:goerli 83 | ``` 84 | 85 | Run tests 86 | 87 | ```zsh 88 | # Run unit tests 89 | yarn test 90 | 91 | # Run staging tests (on Goerli testnet) 92 | yarn test:staging 93 | ``` 94 | 95 | Check tests coverage 96 | 97 | ```zsh 98 | yarn coverage 99 | ``` 100 | 101 | [Optional] Generate converage report 102 | 103 | ```js 104 | // hardhat.config.js 105 | module.exports = { 106 | // ... other configs 107 | gasReporter: { 108 | enabled: true, // set to true when needs a report 109 | }, 110 | }; 111 | ``` 112 | 113 | Lint Solidity files 114 | 115 | ```zsh 116 | # Lint only 117 | yarn lint 118 | 119 | # Lint & fix 120 | yarn lint:fix 121 | ``` 122 | 123 | Code formatting 124 | 125 | ```zsh 126 | yarn format 127 | ``` 128 | 129 | ## Skills 130 | 131 | - [![Solidity]](https://soliditylang.org/) 132 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 133 | - [![Hardhat]](https://hardhat.org/) 134 | - [![Chai]](https://www.chaijs.com/) 135 | - [![Mocha]](https://mochajs.org/) 136 | - [![Chainlink]](https://chain.link/) 137 | 138 | 139 | 140 | ## Roadmap 141 | 142 | - [x] Hardhat Setup 143 | - [x] Contracts Linting 144 | - [x] Hardhat Deploy 145 | - [x] Mocking & helper-hardhat-config 146 | - [x] Solidity Style Guide 147 | - [x] Testing Fund Me Contract 148 | - [x] Breakpoints & Debugging 149 | - [x] Solidity console.log & Debugging 150 | - [x] Storage in Solidity 151 | - [x] Gas Optimizations using storage knowledge 152 | - [x] Staging Tests 153 | - [x] Running Scripts on a Local Node 154 | - [x] Adding scripts to your package.json 155 | 156 | # 157 | 158 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 159 | 160 | 161 | 162 | 163 | [solidity]: 164 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 165 | [javascript]: 166 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 167 | [hardhat]: 168 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 169 | [chai]: https://img.shields.io/badge/Chai-94161F?style=for-the-badge&logo=Chai 170 | [mocha]: 171 | https://custom-icon-badges.demolab.com/badge/Mocha-8D6748?style=for-the-badge&logo=mocha&logoColor=white 172 | [chainlink]: 173 | https://img.shields.io/badge/chainlink-375bd2?style=for-the-badge&logo=chainlink 174 | -------------------------------------------------------------------------------- /08-web3-nft-hardhat/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-08 22 |

23 | 24 | View Code · 25 | Check 26 | My Full Journey 27 | 28 |
29 | 30 |
31 | 32 | 33 | 34 | ## Getting Started 35 | 36 | 1. Clone the repo 37 | 38 | ```sh 39 | git clone https://github.com/levblanc/web3-nft-hardhat.git 40 | ``` 41 | 42 | 2. Install dependencies with `yarn install` or `npm install` 43 | 44 | 3. Create a `.env` file under project's root directory 45 | 46 | ```.env 47 | PRIVATE_KEY=private_key_of_your_wallet 48 | ETHERSCAN_API_KEY=your_etherscan_api_key 49 | GOERLI_RPC_URL=rpc_url_from_provider 50 | PINATA_API_KEY=pinata_api_key 51 | PINATA_API_SECRET=pinata_api_secret 52 | UPLOAD_TO_PINATA=boolean_of_your_choice 53 | ``` 54 | 55 | 56 | 57 | ## Usage 58 | 59 | For local development: 60 | 61 | ```zsh 62 | # spin up hardhat local node 63 | yarn localhost 64 | 65 | # deploy contract 66 | yarn deploy:local 67 | 68 | # Run `mint` function 69 | yarn mint:local 70 | ``` 71 | 72 | For Goerli testnet: 73 | 74 | ```zsh 75 | # deploy contract to Goerli 76 | yarn deploy:goerli 77 | 78 | # Run `mint` function 79 | yarn mint:goerli 80 | ``` 81 | 82 | Run tests 83 | 84 | ```zsh 85 | # Run unit tests 86 | yarn test 87 | ``` 88 | 89 | Check tests coverage 90 | 91 | ```zsh 92 | yarn coverage 93 | ``` 94 | 95 | [Optional] Generate converage report 96 | 97 | ```js 98 | // hardhat.config.js 99 | module.exports = { 100 | // ... other configs 101 | gasReporter: { 102 | enabled: true, // set to true when needs a report 103 | }, 104 | }; 105 | ``` 106 | 107 | Lint Solidity files 108 | 109 | ```zsh 110 | # Lint only 111 | yarn lint 112 | 113 | # Lint & fix 114 | yarn lint:fix 115 | ``` 116 | 117 | Code formatting 118 | 119 | ```zsh 120 | yarn format 121 | ``` 122 | 123 | ## Skills 124 | 125 | - [![Solidity]](https://soliditylang.org/) 126 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 127 | - [![Hardhat]](https://hardhat.org/) 128 | - [![Chai]](https://www.chaijs.com/) 129 | - [![Mocha]](https://mochajs.org/) 130 | - [![Chainlink]](https://chain.link/) 131 | - [![Pinata]](https://www.pinata.cloud/) 132 | 133 | 134 | 135 | ## Roadmap 136 | 137 | - [x] What is an NFT? 138 | - [x] Basic NFT contract & tests 139 | - [x] Creating an ERC20 Token with Openzeppelin 140 | - [x] Random IPFS NFT - Mapping Chainlink VRF Requests 141 | - [x] Random IPFS NFT - Creating Rare NFTs 142 | - [x] Random IPFS NFT - Setting the NFT Image & Mint Price 143 | - [x] Deployment scripts 144 | - [x] Uploading Token Images & Token URIs (metadata) with Pinata 145 | - [x] Unit tests for all NFTs 146 | - [x] Base64 encoding / decoding 147 | - [x] EVM opcodes, ABI encoding functions & call functions directly from 148 | contract 149 | 150 | # 151 | 152 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 153 | 154 | 155 | 156 | 157 | [solidity]: 158 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 159 | [javascript]: 160 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 161 | [hardhat]: 162 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 163 | [chai]: https://img.shields.io/badge/Chai-94161F?style=for-the-badge&logo=Chai 164 | [mocha]: 165 | https://custom-icon-badges.demolab.com/badge/Mocha-8D6748?style=for-the-badge&logo=mocha&logoColor=white 166 | [chainlink]: 167 | https://img.shields.io/badge/chainlink-375bd2?style=for-the-badge&logo=chainlink 168 | [pinata]: 169 | https://custom-icon-badges.demolab.com/badge/Pinata-350462?style=for-the-badge&logo=pinata 170 | -------------------------------------------------------------------------------- /09-web3-nft-marketplace-hardhat/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-09 22 |

23 | 24 | View Code 25 | · Check 26 | My Full Journey 27 | 28 |
29 | 30 |
31 | 32 |

33 | view marketplace app in action 34 |

35 | 36 |
37 | 38 | 39 | 40 | ## Getting Started 41 | 42 | 1. Clone the repo 43 | 44 | ```sh 45 | git clone https://github.com/levblanc/web3-nft-marketplace-hardhat.git 46 | ``` 47 | 48 | 2. Install dependencies with `yarn install` or `npm install` 49 | 50 | 3. Create a `.env` file under project's root directory 51 | 52 | ```.env 53 | PRIVATE_KEY=private_key_of_your_wallet 54 | ETHERSCAN_API_KEY=your_etherscan_api_key 55 | GOERLI_ALCHEMY_URL=rpc_url_from_provider 56 | GOERLI_INFURA_URL=rpc_url_from_provider 57 | PINATA_API_KEY=pinata_api_key 58 | PINATA_API_SECRET=pinata_api_secret 59 | UPLOAD_TO_PINATA=boolean_of_your_choice 60 | UPDATE_FRONT_END=boolean_of_your_choice 61 | ``` 62 | 63 | 64 | 65 | ## Usage 66 | 67 | For local development: 68 | 69 | ```zsh 70 | # spin up hardhat local node 71 | yarn localhost 72 | 73 | # deploy contract 74 | yarn deploy:local 75 | 76 | # Run `mint` function 77 | yarn mint:local 78 | ``` 79 | 80 | For Goerli testnet: 81 | 82 | ```zsh 83 | # deploy contract to Goerli 84 | yarn deploy:goerli 85 | 86 | # Run `mint` function 87 | yarn mint:goerli 88 | ``` 89 | 90 | Run tests 91 | 92 | ```zsh 93 | # Run unit tests 94 | yarn test 95 | ``` 96 | 97 | Check tests coverage 98 | 99 | ```zsh 100 | yarn coverage 101 | ``` 102 | 103 | [Optional] Generate converage report 104 | 105 | ```js 106 | // hardhat.config.js 107 | module.exports = { 108 | // ... other configs 109 | gasReporter: { 110 | enabled: true, // set to true when needs a report 111 | }, 112 | }; 113 | ``` 114 | 115 | Lint Solidity files 116 | 117 | ```zsh 118 | # Lint only 119 | yarn lint 120 | 121 | # Lint & fix 122 | yarn lint:fix 123 | ``` 124 | 125 | Code formatting 126 | 127 | ```zsh 128 | yarn format 129 | ``` 130 | 131 | ## Skills 132 | 133 | - [![Solidity]](https://soliditylang.org/) 134 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 135 | - [![Hardhat]](https://hardhat.org/) 136 | - [![Chai]](https://www.chaijs.com/) 137 | - [![Mocha]](https://mochajs.org/) 138 | - [![Pinata]](https://www.pinata.cloud/) 139 | 140 | 141 | 142 | ## Roadmap 143 | 144 | - [x] Creating a marketplace for ERC721 NFTs 145 | - [x] Concept of 'Pull Over Push' when sending ETH 146 | - [x] Ins & outs of Reentrancy attack 147 | - [x] Solidity Events with indexed params 148 | - [x] Solidity modifiers - review and application on marketplace 149 | - [x] Unit tests for all NFTs 150 | - [x] Scripts to interact with contract functions 151 | 152 | # 153 | 154 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 155 | 156 | 157 | 158 | 159 | [solidity]: 160 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 161 | [javascript]: 162 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 163 | [hardhat]: 164 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 165 | [chai]: https://img.shields.io/badge/Chai-94161F?style=for-the-badge&logo=Chai 166 | [mocha]: 167 | https://custom-icon-badges.demolab.com/badge/Mocha-8D6748?style=for-the-badge&logo=mocha&logoColor=white 168 | [pinata]: 169 | https://custom-icon-badges.demolab.com/badge/Pinata-350462?style=for-the-badge&logo=pinata 170 | -------------------------------------------------------------------------------- /04-web3-lottery-hardhat/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-04 22 |

23 | 24 | View Code 25 | (Javascript) · 26 | View 27 | Code (Typescript) · 28 | Check 29 | My Full Journey 30 | 31 |
32 | 33 |
34 | 35 | 36 | 37 | ## Getting Started 38 | 39 | 1. Clone the repo 40 | 41 | ```sh 42 | git clone https://github.com/levblanc/web3-lottery-hardhat.git 43 | ``` 44 | 45 | 2. Install dependencies with `yarn install` or `npm install` 46 | 47 | 3. Create a `.env` file under project's root directory 48 | 49 | ```.env 50 | PRIVATE_KEY=private_key_of_your_wallet 51 | GOERLI_RPC_URL=rpc_url_from_provider 52 | ETHERSCAN_API_KEY=your_etherscan_api_key 53 | UPDATE_FRONT_END=boolean_of_your_choice 54 | ``` 55 | 56 | 57 | 58 | ## Usage 59 | 60 | For local development: 61 | 62 | ```zsh 63 | # spin up hardhat local node 64 | yarn localhost 65 | 66 | # deploy contract 67 | yarn deploy 68 | ``` 69 | 70 | For Goerli testnet: 71 | 72 | ```zsh 73 | # deploy contract to Goerli 74 | yarn deploy:goerli 75 | ``` 76 | 77 | Run tests 78 | 79 | ```zsh 80 | # Run unit tests 81 | yarn test 82 | 83 | # Run staging tests (on Goerli testnet) 84 | yarn test:staging 85 | ``` 86 | 87 | Check tests coverage 88 | 89 | ```zsh 90 | yarn coverage 91 | ``` 92 | 93 | [Optional] Generate converage report 94 | 95 | ```js 96 | // hardhat.config.js 97 | module.exports = { 98 | // ... other configs 99 | gasReporter: { 100 | enabled: true, // set to true when needs a report 101 | }, 102 | }; 103 | ``` 104 | 105 | Lint Solidity files 106 | 107 | ```zsh 108 | # Lint only 109 | yarn lint 110 | 111 | # Lint & fix 112 | yarn lint:fix 113 | ``` 114 | 115 | Code formatting 116 | 117 | ```zsh 118 | yarn format 119 | ``` 120 | 121 | ## Skills 122 | 123 | - [![Solidity]](https://soliditylang.org/) 124 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 125 | - [![TypeScript]](https://www.typescriptlang.org/) 126 | - [![Hardhat]](https://hardhat.org/) 127 | - [![Chai]](https://www.chaijs.com/) 128 | - [![Mocha]](https://mochajs.org/) 129 | - [![Chainlink]](https://chain.link/) 130 | 131 | 132 | 133 | ## Roadmap 134 | 135 | - [x] Hardhat Setup 136 | - [x] Raffle.sol Setup 137 | - [x] Events in Raffle.sol 138 | - [x] Introduction to Chainlink VRF (Randomness in Web3) 139 | - [x] Hardhat Shorthand 140 | - [x] Implementing Chainlink VRF - The Request 141 | - [x] Implementing Chainlink VRF - The Fulfill 142 | - [x] Introduction to Chainlink Keepers 143 | - [x] Implementing Chainlink Keepers (checkUpKeep) 144 | - [x] Implementing Chainlink Keepers (performUpKeep) 145 | - [x] Enums 146 | - [x] Deploying Raffle.sol & Mock Chainlink VRF Coordinator 147 | - [x] Raffle.sol Unit Tests 148 | - [x] Hardhat Methods & "Time Travel" 149 | - [x] Callstatic 150 | - [x] Raffle.sol Staging Tests 151 | - [x] Testing on a Testnet 152 | 153 | # 154 | 155 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 156 | 157 | 158 | 159 | 160 | [solidity]: 161 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 162 | [javascript]: 163 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 164 | [typescript]: 165 | https://img.shields.io/badge/typescript-3178C6?style=for-the-badge&logo=typescript&logoColor=white 166 | [hardhat]: 167 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 168 | [chai]: https://img.shields.io/badge/Chai-94161F?style=for-the-badge&logo=Chai 169 | [mocha]: 170 | https://custom-icon-badges.demolab.com/badge/Mocha-8D6748?style=for-the-badge&logo=mocha&logoColor=white 171 | [chainlink]: 172 | https://img.shields.io/badge/chainlink-375bd2?style=for-the-badge&logo=chainlink 173 | -------------------------------------------------------------------------------- /11-web3-nft-marketplace-nextjs-thegraph/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-11 22 |

23 | 24 | View 25 | Code · 26 | Check 27 | My Full Journey 28 | 29 |
30 | 31 |
32 | 33 |

34 | view marketplace app in action 35 |

36 | 37 |
38 | 39 | 40 | 41 | ## Getting Started 42 | 43 | 1. Clone the repo 44 | 45 | ```sh 46 | git clone https://github.com/levblanc/web3-nft-marketplace-nextjs-thegraph.git 47 | ``` 48 | 49 | 2. Install dependencies with `yarn install` or `npm install` 50 | 51 | 3. Deploy contracts in 52 | [web3-nft-marketplace-hardhat](https://github.com/levblanc/web3-nft-marketplace-hardhat) 53 | 54 | ```zsh 55 | # under web3-nft-marketplace-hardhat project directory 56 | 57 | # deploy locally 58 | yarn deploy 59 | 60 | # deploy to goerli testnet 61 | yarn deploy:goerli 62 | ``` 63 | 64 | 3. Update contract address in `constants/contractAddresses.json` 65 | 66 | ```zsh 67 | { 68 | "5": { 69 | "NFTMarketplace": "goerli_nft_marketplace_address", 70 | "DynamicNFT": "goerli_dynamic_nft_address" 71 | }, 72 | "31337": { 73 | "NFTMarketplace": "localhost_nft_marketplace_address", 74 | "DynamicNFT": "localhost_dynamic_nft_address" 75 | } 76 | } 77 | ``` 78 | 79 | 80 | 81 | ## Usage 82 | 83 | Run the development server: 84 | 85 | ```bash 86 | npm run dev 87 | # or 88 | yarn dev 89 | ``` 90 | 91 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the 92 | result. 93 | 94 | ## Skills 95 | 96 | - [![Solidity]](https://soliditylang.org/) 97 | - [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 98 | - [![ReactJS]](https://reactjs.org/) 99 | - [![NextJS]](https://nextjs.org/) 100 | - [![TheGraph]](https://thegraph.com/en/) 101 | - [![ApolloGraphQL]](https://www.apollographql.com/) 102 | - [![GraphQL]](https://graphql.org/) 103 | - [![Rainbow]](https://www.rainbowkit.com/) 104 | - [![Wagmi]](https://wagmi.sh/) 105 | - [![Antd]](https://ant.design/) 106 | 107 | 108 | 109 | ## Roadmap 110 | 111 | - [x] Setup NextJS to work with the graph queries and marketplace/dynamicNFT 112 | contracts 113 | - [x] Query subgraph and display contract data with GraphQL & Apollo client 114 | - [x] Use RainbowKit for wallet connection 115 | - [x] Use Wagmi to interact with smart contracts 116 | - [x] Build separate pages for displaying, minting and listing NFTs 117 | - [x] Customize UI/UX with Ant Design Components & Tailwind Styling 118 | 119 | # 120 | 121 | ### [» Check the main repo of my full web3 journey](https://github.com/levblanc/web3-blockchain-solidity-course-js) 122 | 123 | 124 | 125 | 126 | [solidity]: 127 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 128 | [javascript]: 129 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 130 | [reactjs]: 131 | https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB 132 | [nextjs]: 133 | https://img.shields.io/badge/next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white 134 | [thegraph]: 135 | https://custom-icon-badges.demolab.com/badge/TheGraph-0C0A1C?style=for-the-badge&logo=thegraph&logoColor=white 136 | [apollographql]: 137 | https://img.shields.io/badge/Apollo%20GraphQL-311C87.svg?style=for-the-badge&logo=Apollo-GraphQL&logoColor=white 138 | [graphql]: 139 | https://img.shields.io/badge/GraphQL-E10098.svg?style=for-the-badge&logo=GraphQL&logoColor=white 140 | [rainbow]: 141 | https://custom-icon-badges.demolab.com/badge/Rainbowkit-032463?style=for-the-badge&logo=rainbow 142 | [wagmi]: 143 | https://custom-icon-badges.demolab.com/badge/Wagmi-1C1B1B?style=for-the-badge&logo=wagmi 144 | [antd]: 145 | https://img.shields.io/badge/Ant%20Design-0170FE.svg?style=for-the-badge&logo=Ant-Design&logoColor=white 146 | -------------------------------------------------------------------------------- /14-web3-security-hardhat/README.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | Logo 6 | 7 | 8 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

9 | 10 |

11 | My Web3 full stack Solicity smart contract & blockchain development journey along with 12 |
13 | » this course from Patrick Collins 14 |

15 |
16 | 17 |
18 | 19 |
20 |

21 | challenge-14 22 |

23 | 24 | View Code · 25 | Check 26 | My Full Journey 27 | 28 |
29 | 30 |
31 | 32 | 33 | 34 | ## Getting Started 35 | 36 | 1. Clone the repo 37 | 38 | ```sh 39 | git clone https://github.com/levblanc/web3-security-hardhat.git 40 | ``` 41 | 42 | 2. Install dependencies with `yarn install` or `npm install` 43 | 44 | 45 | 46 | ## Usage 47 | 48 | ### Slither 49 | 50 | 1. Check and make sure python3 & pip3 are installed 51 | 52 | ```zsh 53 | $ python3 --version 54 | Python 3.9.9 55 | 56 | $ pip3 --version 57 | pip 21.3.1 from /opt/homebrew/lib/python3.9/site-packages/pip (python 3.9) 58 | ``` 59 | 60 | 2. Install `solc-select` & set target Solidity version 61 | 62 | ```zsh 63 | # install solc-select 64 | pip3 install solc-select 65 | 66 | # install solidity compiler 67 | solc-select install 0.8.17 68 | 69 | # output 70 | Installing '0.8.17'... 71 | Version '0.8.17' installed. 72 | 73 | # set solidity version 74 | solc-select use 0.8.17 75 | 76 | # output 77 | Switched global version to 0.8.17 78 | ``` 79 | 80 | 3. Install `slither-analyzer` 81 | 82 | ```zsh 83 | pip3 install slither-analyzer 84 | 85 | # verify installation 86 | slither --help 87 | ``` 88 | 89 | 3. Run command to spin up slither check 90 | 91 | ```zsh 92 | yarn slither 93 | ``` 94 | 95 | ### Eth-Security-Toolbox 96 | 97 | Official docs: https://github.com/trailofbits/eth-security-toolbox 98 | 99 | 1. Install [docker](https://www.docker.com/) on your machine 100 | 2. Pull docker image of `eth-security-toolbox` 101 | 102 | ```zsh 103 | docker pull trailofbits/eth-security-toolbox 104 | ``` 105 | 106 | 3. Spin up toolbox shell 107 | 108 | ```zsh 109 | yarn toolbox 110 | ``` 111 | 112 | 4. Run test 113 | 114 | ```zsh 115 | echidna-test /src/contracts/test/fuzzing/VaultFuzzTest.sol --contract VaultFuzzTest --config /src/contracts/test/fuzzing/config.yaml 116 | ``` 117 | 118 | 5. Exit toolbox shell 119 | 120 | ```zsh 121 | exit 122 | ``` 123 | 124 | ## Lint Solidity files 125 | 126 | ```zsh 127 | # Lint only 128 | yarn lint 129 | 130 | # Lint & fix 131 | yarn lint:fix 132 | ``` 133 | 134 | ## Code formatting 135 | 136 | ```zsh 137 | yarn format 138 | ``` 139 | 140 | ## Skills 141 | 142 | - [![Solidity]](https://soliditylang.org/) 143 | - [![TypeScript]](https://www.typescriptlang.org/) 144 | - [![Hardhat]](https://hardhat.org/) 145 | - [![OpenZeppelin]](https://openzeppelin.com/) 146 | - [![Python]](https://www.python.org/) 147 | - [![Docker]](https://www.docker.com/) 148 | - [![Slither]](https://github.com/crytic/slither) 149 | - [![Echnida]](https://github.com/crytic/echidna) 150 | 151 | ## Roadmap 152 | 153 | - [x] Learn about `slither` as a static and fast auditing tool 154 | - [x] Learn about `eth-security-toolbox` as an auditing toolkit and run with 155 | docker 156 | - [x] Learn about the standard auditing process 157 | - [x] Learn about known attacks and how to avoid them 158 | 159 | ## Two Most Common Attacks: 160 | 161 | - Reentrancy 162 | - Oracle Manipulation 163 | 164 | ## Before deployment: 165 | 166 | 1. ALWAYS run `slither` 167 | 2. Look MANUALLY for oracle manipulation examples or reentrancy 168 | 3. Don't get anything from a centralized location (use Chainlink oracle instead) 169 | 170 | 171 | 172 | 173 | [solidity]: 174 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 175 | [hardhat]: 176 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 177 | [typescript]: 178 | https://img.shields.io/badge/typescript-3178C6?style=for-the-badge&logo=typescript&logoColor=white 179 | [openzeppelin]: 180 | https://img.shields.io/badge/OpenZeppelin-4E5EE4.svg?style=for-the-badge&logo=OpenZeppelin&logoColor=white 181 | [python]: 182 | https://img.shields.io/badge/Python-3776AB.svg?style=for-the-badge&logo=Python&logoColor=white 183 | [docker]: 184 | https://img.shields.io/badge/Docker-2496ED.svg?style=for-the-badge&logo=Docker&logoColor=white 185 | [slither]: 186 | https://custom-icon-badges.demolab.com/badge/Slither-181B22?style=for-the-badge&logo=slither 187 | [echnida]: 188 | https://custom-icon-badges.demolab.com/badge/Echnida-181B22?style=for-the-badge&logo=echnida 189 | -------------------------------------------------------------------------------- /images/blockchain.svg: -------------------------------------------------------------------------------- 1 | 86 | -------------------------------------------------------------------------------- /images/nodejs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/alchemy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /images/ganache.svg: -------------------------------------------------------------------------------- 1 | ganache-logo-v-dark -------------------------------------------------------------------------------- /images/aave.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |
6 | 7 | Logo 8 | 9 | 10 |

Web3, Full Stack Solidity, Smart Contract & Blockchain development with JavaScript

11 | 12 |

13 | My Web3 full stack Solidity smart contract & blockchain development journey along with 14 |
15 | » this course from Patrick Collins 16 |

17 |
18 | 19 |
20 | 21 | 22 | 23 | ## About The Project 24 | 25 | Through out my journey with this course, I keep track of each lesson with 26 | Github, pushed my codes to corresponding repos frequently. 27 | 28 | The purpose of this master repo is to setup a connecting point of all my repos, 29 | and as a demostration/documentation of the new skills acquired and the roadmaps 30 | achieved. 31 | 32 | 33 | 34 | ## Getting Started 35 | 36 | 1. Clone your target repo 37 | 38 | ```sh 39 | # Repo links can be found in each challenge's README.md 40 | # OR 41 | # Click the chalenge badges below 42 | git clone 43 | 44 | # Example: cloning challenge 0 45 | git clone https://github.com/levblanc/solidity-basics.git 46 | ``` 47 | 48 | 2. Install dependencies with `yarn install` or `npm install` 49 | 50 | ## Skills Acquired 51 | 52 |

53 | Solidity 54 | Remix 55 | Javascript 56 | NextJS 57 | React 58 | NodeJS 59 |

60 |

61 | Hardhat 62 | EthersJS 63 | Ganache 64 | Chai 65 | Mocha 66 | AAVE 67 | Chainlink 68 | Alchemy 69 |

70 |

71 | IPFS 72 | Moralis 73 | The Graph 74 | Apollo GraphQL 75 | Wagmi 76 | RainbowKit 77 |

78 | 79 | 80 | 81 | ## Full Course Journey 82 | 83 | challenge-00 84 | 85 | ## Milestones 86 | 87 | - [x] Blockchain basics 88 | - [x] Solidity basics - languange syntax, gas & transactions 89 | - [x] Compile & Deploy contracts (VM and Testnet) 90 | - [x] Chainlink price feeds 91 | 92 | ## Skills 93 | 94 | [![Solidity]](https://soliditylang.org/) [![Chainlink]](https://chain.link/) 95 | [![Remix]](https://remix.ethereum.org/) 96 | 97 | # 98 | 99 | challenge-01 100 | 101 | ## Milestones 102 | 103 | - [x] Local development env setup 104 | - [x] Work with Ganache for local blockchain networks 105 | - [x] Work with Ether.js to create wallet & deploy contracts to testnet or 106 | mainnet 107 | - [x] Interact with contract functions with Ethers.js 108 | - [x] `.env` file & it's content management 109 | - [x] Work with Alchemy as RPC provider 110 | - [x] Verify contract on block explorer UI 111 | - [x] Made everything compadible with Typescript 112 | 113 | ## Skills 114 | 115 | [![Solidity]](https://soliditylang.org/) 116 | [![EthersJS]](https://docs.ethers.io/v5/) 117 | [![Ganache]](https://trufflesuite.com/ganache/) 118 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 119 | [![TypeScript]](https://www.typescriptlang.org/) 120 | [![NodeJS]](https://nodejs.org/) [![Alchemy]](https://www.alchemy.com/) 121 | 122 | # 123 | 124 | challenge-02 125 | 126 | ## Milestones 127 | 128 | - [x] Hardhat env setup 129 | - [x] Hardhat networks & local node 130 | - [x] Deploy contracts with Hardhat (local & testnet) 131 | - [x] Programmatic Verification 132 | - [x] Interacting with contracts in Hardhat 133 | - [x] Hardhat tests & coverage reporter 134 | - [x] Made everything compadible with Typescript 135 | 136 | ## Skills 137 | 138 | [![Solidity]](https://soliditylang.org/) 139 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 140 | [![TypeScript]](https://www.typescriptlang.org/) 141 | [![Hardhat]](https://hardhat.org/) [![Chai]](https://www.chaijs.com/) 142 | [![Mocha]](https://mochajs.org/) 143 | 144 | # 145 | 146 | challenge-03 147 | 148 | ## Milestones 149 | 150 | - [x] Testing with Chainlink mocks & helper-hardhat-config 151 | - [x] Contract testing with Solidity console.log & VS Code breakpoints 152 | - [x] Storage in Solidity 153 | - [x] Gas Optimizations using storage knowledge 154 | - [x] Staging Tests 155 | - [x] Running Scripts on a Local Node 156 | - [x] Adding scripts to your package.json 157 | 158 | ## Skills 159 | 160 | [![Solidity]](https://soliditylang.org/) 161 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 162 | [![Hardhat]](https://hardhat.org/) [![Chai]](https://www.chaijs.com/) 163 | [![Mocha]](https://mochajs.org/) [![Chainlink]](https://chain.link/) 164 | 165 | # 166 | 167 | challenge-04 168 | 169 | ## Milestones 170 | 171 | - [x] Chainlink VRF (Randomness in Web3) 172 | - [x] Implementing Chainlink VRF - The Request 173 | - [x] Implementing Chainlink VRF - The Fulfill 174 | - [x] Introduction to Chainlink Keepers 175 | - [x] Implementing Chainlink Keepers (checkUpKeep) 176 | - [x] Implementing Chainlink Keepers (performUpKeep) 177 | - [x] Enums 178 | - [x] Use Mock Chainlink VRF Coordinator for unit tests 179 | - [x] Hardhat Methods & "Time Travel" 180 | - [x] Callstatic 181 | 182 | ## Skills 183 | 184 | [![Solidity]](https://soliditylang.org/) 185 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 186 | [![TypeScript]](https://www.typescriptlang.org/) 187 | [![Hardhat]](https://hardhat.org/) [![Chai]](https://www.chaijs.com/) 188 | [![Mocha]](https://mochajs.org/) [![Chainlink]](https://chain.link/) 189 | 190 | # 191 | 192 | challenge-05 193 | 194 | ## Milestones 195 | 196 | - [x] Manual Header to understand how `ConnectButton` works 197 | - [x] react-moralis hooks & functions (`useMoralis` & `isWeb3Enabled`, 198 | `useWeb3Contract` & `runContractFunction`) 199 | - [x] Automatic Constant Value UI Updater 200 | - [x] Calling Functions in NextJS 201 | - [x] Reading & Displaying Contract Data 202 | - [x] Tailwind & Styling 203 | 204 | ## Skills 205 | 206 | [![Solidity]](https://soliditylang.org/) 207 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 208 | [![ReactJS]](https://reactjs.org/) [![NextJS]](https://nextjs.org/) 209 | [![Moralis]](https://moralis.io/) [![IPFS]](https://ipfs.tech/) 210 | 211 | # 212 | 213 | challenge-06 214 | 215 | ## Milestones 216 | 217 | - [x] Create ERC20 token manually, refering to 218 | - tutorial on ethereum.org 219 | - OpenZeppelin 220 | - [x] Create ERC20 token with OpenZeppelin template 221 | 222 | ## Skills 223 | 224 | [![Solidity]](https://soliditylang.org/) 225 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 226 | [![Hardhat]](https://hardhat.org/) [![Chai]](https://www.chaijs.com/) 227 | [![Mocha]](https://mochajs.org/) 228 | 229 | # 230 | 231 | challenge-07 232 | 233 | ## Milestones 234 | 235 | - [x] Concepts of ERC, EIP, ERC20 236 | - [x] Creating an ERC20 Token with Openzeppelin 237 | - [x] Concepts of DeFi & Aave 238 | - [x] Programatic Borrowing & Lending 239 | - [x] WETH Wrapped ETH 240 | - [x] Forking Mainnet 241 | - [x] Depositing into Aave 242 | - [x] Borrowing from Aave 243 | - [x] Repaying with Aave 244 | - [x] Visualizing the Transactions (And aTokens) on Etherscan 245 | 246 | ## Skills 247 | 248 | [![Solidity]](https://soliditylang.org/) 249 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 250 | [![Hardhat]](https://hardhat.org/) [![Chai]](https://www.chaijs.com/) 251 | [![Mocha]](https://mochajs.org/) [![Aave]](https://aave.com/) 252 | 253 | # 254 | 255 | challenge-08 256 | 257 | ## Milestones 258 | 259 | - [x] Concept of an NFT? 260 | - [x] Basic NFT contract & tests 261 | - [x] Creating an ERC20 Token with Openzeppelin 262 | - [x] Createing a Random IPFS NFT with Chainlink VRF 263 | - [x] Uploading Token Images & Token URIs (metadata) with Pinata 264 | - [x] Base64 encoding / decoding 265 | - [x] EVM opcodes, ABI encoding functions & call functions directly from 266 | contract 267 | 268 | ## Skills 269 | 270 | [![Solidity]](https://soliditylang.org/) 271 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 272 | [![Hardhat]](https://hardhat.org/) [![Chai]](https://www.chaijs.com/) 273 | [![Mocha]](https://mochajs.org/) [![Chainlink]](https://chain.link/) 274 | [![Pinata]](https://www.pinata.cloud/) 275 | 276 | # 277 | 278 | challenge-09 279 | 280 | ## Milestones 281 | 282 | - [x] Creating a marketplace for ERC721 NFTs 283 | - [x] Concept of 'Pull Over Push' when sending ETH 284 | - [x] Ins & outs of Reentrancy attack 285 | - [x] Solidity Events with indexed params 286 | - [x] Solidity modifiers - review and application on marketplace 287 | - [x] Unit tests for all NFTs 288 | - [x] Scripts to interact with contract functions 289 | 290 | ## Skills 291 | 292 | [![Solidity]](https://soliditylang.org/) 293 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 294 | [![Hardhat]](https://hardhat.org/) [![Chai]](https://www.chaijs.com/) 295 | [![Mocha]](https://mochajs.org/) [![Pinata]](https://www.pinata.cloud/) 296 | 297 | # 298 | 299 | challenge-10 300 | 301 | ## Milestones 302 | 303 | - [x] Setup subgraph env 304 | - [x] Build a subgraph to handle the events emit from NFT marketplace contract 305 | - [x] Deploy to Subgraph Studio on The Graph 306 | 307 | ## Skills 308 | 309 | [![TheGraph]](https://thegraph.com/en/) [![GraphQL]](https://graphql.org/) 310 | 311 | # 312 | 313 | challenge-11 314 | 315 |
316 | view marketplace app in action 317 |
318 | 319 | ## Milestones 320 | 321 | - [x] Setup NextJS to work with the graph queries and marketplace/dynamicNFT 322 | contracts 323 | - [x] Query subgraph and display contract data with GraphQL & Apollo client 324 | - [x] Use RainbowKit for wallet connection 325 | - [x] Use Wagmi to interact with smart contracts 326 | - [x] Build separate pages for displaying, minting and listing NFTs 327 | - [x] Customize UI/UX with Ant Design Components & Tailwind Styling 328 | 329 | ## Skills 330 | 331 | [![Solidity]](https://soliditylang.org/) 332 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 333 | [![ReactJS]](https://reactjs.org/) [![NextJS]](https://nextjs.org/) 334 | [![TheGraph]](https://thegraph.com/en/) 335 | [![ApolloGraphQL]](https://www.apollographql.com/) 336 | [![GraphQL]](https://graphql.org/) [![Rainbow]](https://www.rainbowkit.com/) 337 | [![Wagmi]](https://wagmi.sh/) [![Antd]](https://ant.design/) 338 | 339 | # 340 | 341 | challenge-12 342 | 343 | ## Milestones 344 | 345 | - [x] Types of Upgrades 346 | - [x] Parameter 347 | - [x] Social Migrate 348 | - [x] Proxy 349 | - [x] Proxy Gotchas 350 | - [x] [Function Collisions](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/#transparent-proxies) 351 | - [x] [Storage Collisions](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/#unstructured-storage) 352 | - [x] Metamorphic Upgrades 353 | - [x] [Transparent](https://blog.openzeppelin.com/the-transparent-proxy-pattern/) 354 | - [x] [UUPS (Universal Upgradable Proxies)](https://forum.openzeppelin.com/t/uups-proxies-tutorial-solidity-javascript/7786) 355 | - [x] [Diamond](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/#diamonds) 356 | 357 | ## Skills 358 | 359 | [![Solidity]](https://soliditylang.org/) 360 | [![JavaScript]](https://developer.mozilla.org/fr/docs/Web/JavaScript) 361 | [![Hardhat]](https://hardhat.org/) [![Chai]](https://www.chaijs.com/) 362 | [![Mocha]](https://mochajs.org/) [![Chainlink]](https://chain.link/) 363 | 364 | # 365 | 366 | challenge-13 367 | 368 | ## Milestones 369 | 370 | - [x] [What is a DAO](https://www.youtube.com/watch?v=X_QKZzd68ro)? 371 | - [x] Walked thru Compound app's governance process 372 | - [x] Built an on-chain DAO with 373 | - [x] governance token 374 | - [x] governor contract (with 375 | [OpenZeppelin Contracts Wizard](https://docs.openzeppelin.com/contracts/4.x/wizard)) 376 | - [x] timelock contract 377 | 378 | ## Skills 379 | 380 | [![Solidity]](https://soliditylang.org/) 381 | [![TypeScript]](https://www.typescriptlang.org/) 382 | [![Hardhat]](https://hardhat.org/) [![OpenZeppelin]](https://openzeppelin.com/) 383 | 384 | # 385 | 386 | challenge-14 387 | 388 | ## Milestones 389 | 390 | - [x] Learn about `slither` as a static and fast auditing tool 391 | - [x] Learn about `eth-security-toolbox` as an auditing toolkit and run with 392 | docker 393 | - [x] Learn about the standard auditing process 394 | - [x] Learn about known attacks and how to avoid them 395 | 396 | ## Skills 397 | 398 | [![Solidity]](https://soliditylang.org/) 399 | [![TypeScript]](https://www.typescriptlang.org/) 400 | [![Hardhat]](https://hardhat.org/) [![OpenZeppelin]](https://openzeppelin.com/) 401 | [![Slither]](https://github.com/crytic/slither) 402 | [![Echnida]](https://github.com/crytic/echidna) 403 | 404 | # 405 | 406 | ### Back to top 407 | 408 | 409 | 410 | 411 | [solidity]: 412 | https://img.shields.io/badge/solidity-1E1E3F?style=for-the-badge&logo=solidity 413 | [chainlink]: 414 | https://img.shields.io/badge/chainlink-375bd2?style=for-the-badge&logo=chainlink 415 | [remix]: 416 | https://img.shields.io/badge/remix%20IDE-181E29?style=for-the-badge&logo=ethereum 417 | [javascript]: 418 | https://img.shields.io/badge/javascript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 419 | [typescript]: 420 | https://img.shields.io/badge/typescript-3178C6?style=for-the-badge&logo=typescript&logoColor=white 421 | [nodejs]: 422 | https://img.shields.io/badge/node.js-339933?style=for-the-badge&logo=nodedotjs&logoColor=white 423 | [ganache]: 424 | https://custom-icon-badges.demolab.com/badge/Ganache-201F1E?style=for-the-badge&logo=ganache 425 | [ethersjs]: 426 | https://custom-icon-badges.demolab.com/badge/Ethers.js-29349A?style=for-the-badge&logo=ethers&logoColor=white 427 | [alchemy]: 428 | https://custom-icon-badges.demolab.com/badge/Alchemy-2356D2?style=for-the-badge&logo=alchemy&logoColor=white 429 | [hardhat]: 430 | https://custom-icon-badges.demolab.com/badge/Hardhat-181A1F?style=for-the-badge&logo=hardhat 431 | [chai]: https://img.shields.io/badge/Chai-94161F?style=for-the-badge&logo=Chai 432 | [mocha]: 433 | https://custom-icon-badges.demolab.com/badge/Mocha-8D6748?style=for-the-badge&logo=mocha&logoColor=white 434 | [reactjs]: 435 | https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB 436 | [nextjs]: 437 | https://img.shields.io/badge/next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white 438 | [ipfs]: https://img.shields.io/badge/IPFS-0A1B2B?style=for-the-badge&logo=ipfs 439 | [moralis]: 440 | https://custom-icon-badges.demolab.com/badge/Moralis-2559BB?style=for-the-badge&logo=moralis 441 | [aave]: 442 | https://custom-icon-badges.demolab.com/badge/Aave-1C202F?style=for-the-badge&logo=aave 443 | [pinata]: 444 | https://custom-icon-badges.demolab.com/badge/Pinata-350462?style=for-the-badge&logo=pinata 445 | [thegraph]: 446 | https://custom-icon-badges.demolab.com/badge/TheGraph-0C0A1C?style=for-the-badge&logo=thegraph&logoColor=white 447 | [apollographql]: 448 | https://img.shields.io/badge/Apollo%20GraphQL-311C87.svg?style=for-the-badge&logo=Apollo-GraphQL&logoColor=white 449 | [graphql]: 450 | https://img.shields.io/badge/GraphQL-E10098.svg?style=for-the-badge&logo=GraphQL&logoColor=white 451 | [rainbow]: 452 | https://custom-icon-badges.demolab.com/badge/Rainbowkit-032463?style=for-the-badge&logo=rainbow 453 | [wagmi]: 454 | https://custom-icon-badges.demolab.com/badge/Wagmi-1C1B1B?style=for-the-badge&logo=wagmi 455 | [antd]: 456 | https://img.shields.io/badge/Ant%20Design-0170FE.svg?style=for-the-badge&logo=Ant-Design&logoColor=white 457 | [openzeppelin]: 458 | https://img.shields.io/badge/OpenZeppelin-4E5EE4.svg?style=for-the-badge&logo=OpenZeppelin&logoColor=white 459 | [slither]: 460 | https://custom-icon-badges.demolab.com/badge/Slither-181B22?style=for-the-badge&logo=slither 461 | [echnida]: 462 | https://custom-icon-badges.demolab.com/badge/Echnida-181B22?style=for-the-badge&logo=echnida 463 | --------------------------------------------------------------------------------