├── 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 |
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 |
31 |
32 |
33 |
34 |
35 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
29 |
30 |
31 |
32 |
33 |
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 |
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 |
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 |
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 |
30 |
31 |
32 |
33 |
34 |
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 |
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 |
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 |
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 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | ## Full Course Journey
82 |
83 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
314 |
315 |
316 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------