Blockchain Developer, Smart Contract, & Solidity Course - Powered By AI - Beginner to Expert Course | Foundry Edition 2023
Welcome to the repository for the Blockchain Developer, Smart Contract, & Solidity Course | Powered By AI | Beginner to Expert Course | Foundry Edition 2023
Lessons 0 - 6 | Lessons 7 - 11 | Lessons 12 - 15 |
---|---|---|
YouTube Playlist of each section
Resources
Lesson 1: Blockchain Basics
- What is a Blockchain? What does a blockchain do?
- The Purpose Of Smart Contracts
- Other Blockchain Benefits
- What have Smart Contracts done so far?
- Making Your First Transaction
- Gas I: Introduction to Gas
- How Do Blockchains Work?
- Signing Transactions
- Gas II
- Gas II Summary
- High-Level Blockchain Fundamentals
Lesson 4: Remix Fund Me
- Introduction
- Setup
- Sending ETH through a function
- Reverts
- Getting real world price data (Chainlink)
- Quick recap I
- Interfaces
- AI Help III
- Importing from NPM / GitHub
- Getting Prices from Chainlink
- More solidity math
- msg.sender
- Quick recap II
- Library
- SafeMath
- For Loop
- Resetting an array
- Transfer, Send, and Call
- Constructor
- Modifiers
- Testnet Demo
- Advanced Solidity
Lesson 6: Foundry Simple Storage
- Introduction
- Installation & Setup (MacOS & Linux)
- Local Development Introduction
- Foundry Install
- VSCode Setup II
- Foundry Setup
- Formatting Solidity in VSCode
- Compiling in Foundry
- Deploying to a local chain I (Anvil or Ganache)
- Adding another network to metamask
- Deploying to a local chain II (Forge Create)
- Private Key Rant I
- Deploying to a local chain III (Forge Script)
- What is a transaction (But actually)
- Private Key Rant II
- Can you Encrypt a Private Key -> a keystore in foundry yet??
- ThirdWeb Deploy
- Private Key Rant Summary:
- Cast Send
- Deploying to a testnet or a mainnet
- Verifying a contract the manual way
- Cleaning up the project
- Alchemy
- Summary
Lesson 7: Foundry Fund Me
- Introduction
- Setup
- Testing Introduction
- Setup Continued
- Tests
- Debugging Tests I
- Advanced Deploy Scripts I
- Forked Tests
- Refactoring I: Testing Deploy Scripts
- Refactoring II: Helper Config
- Refactoring III: Mocking (continued)
- Magic Numbers
- Break time!
- More Cheatcodes
- More Coverage
- Chisel
- Gas: Cheaper Withdraw
- Storage
- Gas: Cheaper Withdraw (continued)
- Interactions.s.sol
- Makefile
- Pushing to GitHub
- ๐ธ๐ฆ Tweet Me (add your repo in)!
- Recap
Lesson 9: Foundry Smart Contract Lottery
- Introduction
- Raffle.sol Setup
- Solidity Contract Layout
- Custom Errors
- Events
- block.timestamp
- Chainlink VRF
- Implementing Chainlink VRF - Introduction
- Implementing Chainlink VRF - The Request
- Implementing Chainlink VRF - The FulFill
- Chainlink VRF Recap
- Enum
- Resetting an array
- Note on building
- CEI
- Introduction to Chainlink Automation
- Implementing Chainlink Keepers - checkUpkeep
- Implementing Chainlink Keepers - checkUpkeep continued
- Implementing Chainlink Keepers - performUpkeep
- Mid-Lesson Recap
- Tests & Deploy Script Setup
- Tests & Deploy Script Continued
- Lots of Tests
- Create Subscription Script
- Create Subscription from the UI
- Fund Subscription Script
- Add Consumer Script
- More Tests
- PerformUpkeep Tests
- Getting Event Data into Foundry Scripts
- Intro to Fuzz tests
- One Big Test
- Passing the private key to vm.startBroadcast
- Integrations Test
- Testnet Demo - Makefile setup
- Testnet Demo - The Demo
- Console.log Debugging
- forge test --debug
- Recap
Lesson 11: Foundry NFTs | MoodNFT
- Introduction
- What is an NFT?
- Foundry Setup
- IPFS
- Using IPFS
- Basic NFT: Deploy Script
- Basic NFT: Tests
- Basic NFT: Interactions
- Basic NFT: Testnet Demo
- The issue with IPFS & HTTPS TokenURI NFTs
- What is an SVG?
- SVG NFT: Introduction
- SVG NFT: Encoding the NFT
- SVG NFT: Flipping the mood
- SVG NFT: Deploy Script
- SVG NFT: Debugging practice & some notes
- SVG NFT: Anvil Demo
- Advanced: EVM Opcodes, Encoding, and Calling
- Verifying Metamask Transactions
- Filecoin & Arweave
- Lesson 11 Recap
Lesson 12: Foundry DeFi | Stablecoin (The PINNACLE PROJECT!! GET HERE!)
- What is DeFi?
- Code Walkthrough
- What is a stablecoin (But actually)
- DecentralizedStableCoin.sol
- DSCEngine.sol Setup
- Deposit Collateral
- Mint DSC
- Testing while developing
- depositCollateralAndMintDsc
- redeemCollateral
- Liquidate
- Leveling up your testing skillz
- Challenge: Code coverage above 80% for DSCEngine.sol
- Fuzz (Invariant) Testing
- Open-based Fuzz tests
- Handler-based Fuzz tests
- Price Feed Handling
- OracleLib
- Note on audit preparedness
- Recap
- Lens Protocol
- Recommended Testnet: Sepolia
- Recommended DevOps: foundry-devops
- Main Faucet: https://faucets.chain.link
- Backup Faucet: https://sepoliafaucet.com/
โ ๏ธ All code associated with this course is for demo purposes only. They have not been audited and should not be considered production ready. Please use at your own risk.
- AI Frens
- ChatGPT
- Just know that it will often get things wrong, but it's very fast!
- Phind
- Like ChatGPT, but it searches the web
- Bard
- Other AI extensions
- ChatGPT
- Github Discussions
- Ask questions and chat about the course here!
- Stack Exchange Ethereum
- Great place for asking technical questions about Ethereum
- Peeranha
- Decentralized Stack Exchange!
These are 100% optional to do.
After every lesson, you'll see two QR codes. Those codes will send you to an NFT deployed to Sepolia or Arbitrum. They contain a challenge for you to solve, and in return, you'll be given an AWESOME NFT.
IF YOU DECIDE TO MINT THE REAL NFT:
- We didn't audit the NFT, so if you want to make sure you'll be safe, interact with the contract using a burner wallet (a wallet with very little money that you don't use for anything else)
- In fact... Get good at interacting with wallets from a burner wallet
- Read my Tweet thread on basic wallet safety
- It might be a good idea to wait till later in the course when we teach you about verifying metamask transactions.
- Feel free to mint NFTs on sepolia without worrying about the above
- We didn't show you how to bring ETH -> Arbitrum, but the process would be:
- Send ETH -> one of your wallets like:
- Use the Arbitrum Bridge
โญ๏ธ (0:00:00) | Lesson 0: Welcome!
- Follow the repository: While going through the course be 100% certain to follow along with the github repository. If you run into in an issue check the chronological-updates in the repo.
- Be Active in the community: Ask questions and engage with other developers going through the course in the discussions tab, be sure to go and say hello or gm! This space is different from the other industries, you don't have to be secretive; communicate, network and learn with others :)
- Learn at your own pace: It doesn't matter if it takes you a day, a week, a month or even a year. Progress >>> Perfection
- Take Breaks: You will exhaust your mind and recall less if you go all out and watch the entire course in one sitting. Suggested Strategy every 25 minutes take a 5 min break, and every 2 hours take a longer 30 min break
- Refer to Documentation: Things are constantly being updated, so whenever Patrick opens up some documentation, open it your end and maybe even have the code sample next to you.
- Use ChatGPT and/or the course chat
(back to top) โฌ๏ธ
โญ๏ธ (0:13:54) | Lesson 1: Blockchain Basics
- Bitcoin Whitepaper
- Ethereum Whitepaper
- What is a Smart Contract?
- Nick Szabo
- Hybrid Smart Contracts
- Blockchain Oracles
- Terminology
- Web3
- What is a blockchain
โจ๏ธ (0:24:26) | The Purpose Of Smart Contracts
- ๐ฅ Original Video
- ๐ฆฌ My ETH Denver Talk
- ๐ McDonalds Scandal
- โ More on the evolution of agreements
- โ๏ธ What is a Smart Contract?
- ๐งฑ How does a blockchain work?
- ๐ฎ Chainlink & Oracles
โจ๏ธ (0:39:53) | Other Blockchain Benefits
- Decentralized
- Transparency & Flexibility
- Speed & Efficiency
- Security & Immutability
- Counterparty Risk Removal
- Trust Minimized Agreements
โจ๏ธ (0:44:20) | What have Smart Contracts done so far?
โจ๏ธ (0:46:55) | Making Your First Transaction
- Metamask Download Link
- Etherscan
- Sepolia Etherscan
- Sepolia Faucet (Check the link token contracts page)
- NOTE: The Chainlink documentation always has the most up to date faucets on their link token contracts page. If the faucet above is broken, check the chainlink documentation for the most up to date faucet.
- OR, use the Sepolia ETH Faucet, just be sure to swap your metamask to Sepolia!
โจ๏ธ (1:06:16) | Gas I: Introduction to Gas
โจ๏ธ (1:15:39) | How Do Blockchains Work?
โจ๏ธ (1:33:09) | Signing Transactions
- Block Rewards
- Advanced Gas
- EIP 1559
- GWEI, WEI, and ETH
โจ๏ธ (1:48:40) | Gas II Summary
โจ๏ธ (1:51:36) | High-Level Blockchain Fundamentals
(back to top) โฌ๏ธ
๐ป Code: https://github.com/cyfrin/remix-simple-storage-f23
โญ๏ธ (2:10:42) | Lesson 2: Welcome to Remix - Simple Storage
โจ๏ธ (2:16:40) | Setting Up Your First Contract
- Versioning
- Take notes in your code!
- What is a software license
- SPDX License
- Compiling
- Contract Declaration
โจ๏ธ (2:24:09) | Basic Solidity Types
- Types & Declaring Variables
uint256
,int256
,bool
,string
,address
,bytes32
- Solidity Types
- Bits and Bytes
- Default Initializations
- Comments
โจ๏ธ (2:31:57) | Basic Solidity Functions
- Functions
- Deploying a Contract
- Smart Contracts have addresses just like our wallets
- Calling a public state-changing Function
- Visibility
- Gas III | An example
- Scope
- View & Pure Functions
โจ๏ธ (2:51:29) | Basic Solidity Arrays & Structs
- Structs
- Intro to Storage
- Arrays
- Dynamic & Fixed Sized
push
array function
โจ๏ธ (3:03:31) | Basic Solidity Errors & Warnings
- Yellow: Warnings are Ok
- Red: Errors are not Ok
โจ๏ธ (3:08:13) | Basic Solidity Memory, Storage, & Calldata (Intro)
- 6 Places you can store and access data
- calldata
- memory
- storage
- code
- logs
- stack
โจ๏ธ (3:14:37) | Basic Solidity Mappings
โจ๏ธ (3:17:46) | Deploying your First Contract
- A testnet or mainnet
- Connecting Metamask
- Find a faucet here
- See the faucets at the top of this readme!
- Interacting with Deployed Contracts
โจ๏ธ (3:27:07) | The EVM & A Recap of Lesson 2
- The EVM
(back to top) โฌ๏ธ
๐ป Code: https://github.com/cyfrin/remix-storage-factory-f23
โญ๏ธ (3:29:58) | Lesson 3 | Storage Factory
โจ๏ธ (3:41:30) | Importing Contracts into other Contracts
โจ๏ธ (3:52:49) | Interacting with other contracts
- To interact, you always need: ABI + Address
- ABI
โจ๏ธ (4:00:44) | Inheritance & Overrides
โจ๏ธ (4:07:37) | Lesson 3 Recap
(back to top) โฌ๏ธ
๐ป Code: https://github.com/Cyfrin/remix-fund-me-f23
โญ๏ธ (4:09:08) | Lesson 4 | Fund Me
โจ๏ธ (4:14:00) | Sending ETH through a function
โจ๏ธ (4:22:06) | Getting real world price data (Chainlink)
- What is a blockchain oracle?
- What is the oracle problem?
- Chainlink
- Chainlink Price Feeds (Data Feeds)
- Chainlink VRF
- Chainlink Keepers
- Chainlink API Calls
- Importing Tokens into your Metamask
- Request and Receive Chainlink Model
โจ๏ธ (4:36:22) | Quick recap I
- For reference - ChainLink Interface's Repo
โจ๏ธ (4:43:31) | AI Help III
โจ๏ธ (4:46:03) | Importing from NPM / GitHub
โจ๏ธ (4:48:07) | Getting Prices from Chainlink
โจ๏ธ (4:52:00) | More Solidity math
- Multiply before you divide
- tuple
- Floating Point Numbers in Solidity
- Type Casting
- Gas Estimation Failed
- Someone should make an article explaining this error
- msg.sender
- named mappings
โจ๏ธ (4:59:53) | Quick recap II
- For Loop
/* */
is another way to make comments
โจ๏ธ (5:15:32) | Resetting an array
โจ๏ธ (5:16:32) | Transfer, Send, and Call
โจ๏ธ (5:24:23) | Constructor
โจ๏ธ (5:29:54) | Tesnet Demo
โจ๏ธ (5:34:01) | Advanced Solidity
โจ๏ธ (5:34:53) | Immutable & Constant
- Immutable
- Constant
- Current ETH Gas Prices
- Don't stress about gas optimizations! (yet)
- Naming Conventions
โจ๏ธ (5:42:08) | Custom Errors
โจ๏ธ (5:44:56) | Receive & Fallback Functions
โจ๏ธ (5:57:10) | Lesson 4 Recap
(back to top) โฌ๏ธ
DO NOT SKIP THIS!!
โญ๏ธ (6:00:00) | Lesson 5 | AI Prompting
โจ๏ธ (6:12:57) | Setting up GitHub
โจ๏ธ (6:14:24) | Formatting a question
- It's a good idea to ask your AI buddy to format your questions in markdown *
โจ๏ธ (6:19:58) | SpeedRunEthereum
- Special Guest Austin
(back to top) โฌ๏ธ
๐ป Code: https://github.com/Cyfrin/foundry-simple-storage-f23
โญ๏ธ (6:23:59) | Lesson 6 | Foundry Simple Storage
โจ๏ธ (6:29:44) | Installation & Setup (MacOS & Linux)
โจ๏ธ (6:32:26) | Windows Setup (WSL)
- Special Guest Vasiliy
- WSL
- When working in WSL, use Linux commands instead of Windows commands
- TroubleShooting
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
โ ๏ธ Please use Gitpod as an absolute last resort
- Gitpod
- If using this, NEVER share a private key with real money on Gitpod
- Ideally you figure out the MacOS, Linux, or Windows install though
CMD + K
orCTRL + K
clears the terminalcode .
to open VSCode in a new VSCode window
โจ๏ธ (6:44:37) | Foundry Install
โจ๏ธ (6:52:00) | VSCode Setup II
- CoPilot
- Copilot labs
- Hardhat Solidity Extension
- VSCodium
mkdir foundry-f23
cd foundry-f23
mkdir foundry-simple-storage-f23
โจ๏ธ (6:57:17) | Foundry Setup
- FreeCodeCamp Bash
โจ๏ธ (7:04:19) | Formatting Solidity in VSCode
- Format your solidity code with in your
settings.json
"[solidity]": {
"editor.defaultFormatter": "NomicFoundation.hardhat-solidity"
},
"[javascript]":{
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
โจ๏ธ (7:08:31) | Compiling in Foundry
โจ๏ธ (7:09:49) | Deploying to a local chain I (Anvil or Ganache)
โจ๏ธ (7:17:44) | Adding another network to Metamask
โจ๏ธ (7:19:41) | Deploying to a local chain II (Forge Create)
- 2 Ways to deploy:
-
forge create
-
forge script
-
โจ๏ธ (7:23:45) | Private Key Rant I
history -c
โจ๏ธ (7:26:17) | Deploying to a local chain III (Forge Script)
โจ๏ธ (7:36:02) | What is a transaction (But actually)
cast --to-base 0x01 dec
โจ๏ธ (7:41:41) | Private Key Rant II
cast send
source .env
โจ๏ธ (7:45:00) | Can you Encrypt a Private Key -> a keystore in foundry yet??
- A: No
- The .env pledge
โจ๏ธ (7:51:44) | ThirdWeb Deploy
- Special Guest Ciara
- nodejs install
- npm install
- thirdweb
โจ๏ธ (7:56:25) | Private Key Rant Summary
Summary:
When you look to deploy
with real money, you should use either:
1. A password encrypted keystore
2. Something like thirdweb deploy
The idea is you never want to have
your private key or password
ANYWHERE written in plain text
(Aka, you always want it encrypted)
โจ๏ธ (8:00:26) | Deploying to a testnet or a mainnet
โจ๏ธ (8:06:06) | Verifying a contract the manual way
โจ๏ธ (8:07:43) | Cleaning up the project
forge fmt
README.md
โจ๏ธ (8:10:28) | Alchemy & the mempool
(back to top) โฌ๏ธ
๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐
๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐
โญ๏ธ (0:00:00) | Lesson 7: Foundry Fund Me
๐ป Code: https://github.com/Cyfrin/foundry-fund-me-f23
โจ๏ธ (4:40) | Testing Introduction
โจ๏ธ (6:14) | Setup Continued
- Chainlink Brownie Contracts Github Repo
forge install smartcontractkit/[email protected] --no-commit
- Dependencies
- remappings
- Chainlink Brownie Contracts
โจ๏ธ (20:45) | Debugging Tests I
โจ๏ธ (23:16) | Advanced Deploy Scripts I
- The test option
-m
regex is deprecated. Please use--match-test
or--mt
instead.
forge test -m testPriceFeedVersionIsAccurate -vvv
is depreciated. Please use
forge test --match-test testPriceFeedVersionIsAccurate -vvv
- 4 types of testing:
1. Unit: Testing a single function
2. Integration: Testing multiple functions
3. Forked: Testing on a forked network
4. Staging: Testing on a live network (testnet or mainnet)
โจ๏ธ (34:17) | Refactoring I: Testing Deploy Scripts
โจ๏ธ (41:28) | Refactoring II: Helper Config
- block.chainid
- Chain ID List
- 11155111 is ETH Sepolia
- 1 is ETH Mainnet
โจ๏ธ (54:32) | Refactoring III: Mocking
- Mocking
- Chainlink Github
- Multiple Versions of Solidity
โจ๏ธ (58:40) | Magic Numbers
โจ๏ธ (1:00:45) | Refactoring III: Mocking (continued)
โจ๏ธ (1:05:02) | Break time!
Take a break!
โจ๏ธ (1:05:06) | More Cheatcodes
โจ๏ธ (1:17:36) | More Coverage
- State tree testing
- Arrange, Act, Assert
- hoax
- uint160 -> address
- vm.startPrank
โจ๏ธ (1:33:50) | Gas: Cheaper Withdraw
- Gas Reporter
forge snapshot
vm.txGasPrice
gasLeft()
tx.getprice
- ** Advanced **
- Storage Layout
- Purpose of the memory keyword
cast storage
- Opcodes
- Opcodes by Gas
- Opcodes by Gas
- Append
s_
to storage variables - Append
i_
to immutable variables - Caps lock and underscore constant variables
- Chainlink Solidity Style Guide
โจ๏ธ (1:48:20) | Gas: Cheaper Withdraw (continued)
โจ๏ธ (1:56:11) | Interactions.s.sol
โจ๏ธ (2:19:17) | Pushing to GitHub
- Add these to your
.gitignore
.env
lib/
broadcast/
- Git Docs
- GitHub docs
- Github Quickstart
- What is Git?
- The quickstart that we follow in the video
- Learn about git and GitHub
๐ธ๐ฆ Tweet Me (add your repo in)!
โจ๏ธ (2:34:56) | Tweet Me (add your repo in)!
โจ๏ธ (2:35:13) | Lesson 7: Recap
(back to top) โฌ๏ธ
โญ๏ธ (2:37:02) | Lesson 8: HTML Fund Me
๐ป Code: https://github.com/Cyfrin/html-fund-me-f23
โจ๏ธ (2:40:25) | How Metamask works with your browser
โจ๏ธ (2:52:34) | Introduction to function selectors
(back to top) โฌ๏ธ
โญ๏ธ (3:04:09) | Lesson 9: Smart Contract Lottery
๐ป Code: https://github.com/Cyfrin/foundry-smart-contract-lottery-f23
โจ๏ธ (3:08:16) | Raffle.sol Setup
- Raffle.sol Setup
โจ๏ธ (3:15:53) | Solidity Contract Layout
// Layout of Contract:
// version
// imports
// errors
// interfaces, libraries, contracts
// Type declarations
// State variables
// Events
// Modifiers
// Functions
// Layout of Functions:
// constructor
// receive function (if exists)
// fallback function (if exists)
// external
// public
// internal
// private
// internal & private view & pure functions
// external & public view & pure functions
โจ๏ธ (3:17:37) | Custom Errors
- Custom Errors in Solidity
- Introduction to Events
- Events & Logging Video
- Events & Logging in Hardhat
โจ๏ธ (3:33:29) | block.timestamp
โจ๏ธ (3:37:13) | Chainlink VRF
- Introduction to Chainlink VRF
- Special Guest Richard
- Chainlink VRFv2 Docs
- Chainlink VRFv2 Walkthrough
- Chainlink Contracts
โจ๏ธ (3:47:21) | Implementing Chainlink VRF - Introduction
- Implementing Chainlink VRF
forge install smartcontractkit/[email protected] --no-commit
- Modulo
โจ๏ธ (4:13:04) | Resetting an array
โจ๏ธ (4:14:31) | Note on building
โจ๏ธ (4:16:00) | CEI (Checks, Effects, Interactions)
โจ๏ธ (4:18:31) | Introduction to Chainlink Automation
- Chainlink Automation Docs
- Chainlink Automation Walkthrough
โจ๏ธ (4:33:47) | Implementing Chainlink Keepers - checkUpkeep
- Enum
- block.timestamp
โจ๏ธ (4:40:10) | Implementing Chainlink Keepers - performUpkeep
โจ๏ธ (4:43:00) | Mid-Lesson Recap
โจ๏ธ (4:44:08) | Tests & Deploy Script Setup
โจ๏ธ (4:52:02) | Mock Chainlink VRF Coordinator
โจ๏ธ (4:56:25) | Tests & Deploy Script Continued
โจ๏ธ (5:04:50) | Lots of Tests
โจ๏ธ (5:09:37) | Testing Events in Foundry
โจ๏ธ (5:12:37) | vm.roll & vm.warp
โจ๏ธ (5:15:21) | Create Subscription Script
โจ๏ธ (5:26:41) | Create Subscription from the UI
โจ๏ธ (5:30:19) | Fund Subscription Script
โจ๏ธ (5:42:29) | Add Consumer Script
forge coverage --report debug
โจ๏ธ (5:59:12) | PerformUpkeep Tests
- Expecting Custom Errors
โจ๏ธ (6:03:23) | Getting Event Data into Foundry Scripts
vm.recordLogs
โจ๏ธ (6:11:48) | Intro to Fuzz tests
โจ๏ธ (6:15:41) | One Big Test
โจ๏ธ (6:26:30) | Passing the private key to vm.startBroadcast
โจ๏ธ (6:41:08) | Integrations Test
โจ๏ธ (6:44:42) | Testnet Demo - Makefile setup
โจ๏ธ (6:52:33) | Testnet Demo - The Demo
โจ๏ธ (6:59:30) | Console.log Debugging
โจ๏ธ (7:01:06) | forge test --debug
- Chainlink VRF: 2 LINK
- Chainlink Keepers: 8 LINK
(back to top) โฌ๏ธ
โญ๏ธ (7:08:04) | Lesson 10: ERC20s
๐ป Code: https://github.com/Cyfrin/foundry-erc20-f23
- What is an EIP?
- EIPs codebase
โจ๏ธ (7:10:42) | What is an ERC20?
- Video (using brownie/python)
- EIP-20
- ERC-677
- EIP-777
โจ๏ธ (7:12:06) | Manually Creating an ERC20 Token
.github
โจ๏ธ (7:19:01) | ERC20 Token - Openzeppelin
- Openzeppelin
- Openzeppelin Contracts
- Solmate (Openzeppelin alternative)
โจ๏ธ 7:22:58 | Deploy Script
(back to top) โฌ๏ธ
โญ๏ธ (7:40:56) | Lesson 11: NFTs
๐ป Code: https://github.com/Cyfrin/foundry-nft-f23
โจ๏ธ (7:43:21) | What is an NFT?
- Video
- [Optional: All on Chain SVG NFT]
- EIP-721
โจ๏ธ (7:49:54) | Foundry Setup
- TokenURI
- Pudgy Penguin Example
โจ๏ธ (8:13:59) | Basic NFT: Deploy Script
โจ๏ธ (8:15:25) | Basic NFT: Tests
- Comparing strings in solidity
chisel
โจ๏ธ (8:25:31) | Basic NFT: Interactions
โจ๏ธ (8:28:24) | Basic NFT: Testnet Demo
โจ๏ธ (8:34:32) | The issue with IPFS & HTTPS TokenURI NFTs
โจ๏ธ (8:38:30) | What is an SVG?
โจ๏ธ (8:45:54) | SVG NFT: Introduction
โจ๏ธ (8:50:03) | SVG NFT: Encoding the NFT
โจ๏ธ (9:06:41) | SVG NFT: Flipping the mood
โจ๏ธ (9:08:44) | SVG NFT: Deploy Script
โจ๏ธ (9:25:46) | SVG NFT: Debugging practice & some notes
โจ๏ธ (9:31:29) | SVG NFT: Anvil Demo
โจ๏ธ (9:36:58) | Filecoin & Arweave
- Special Guest Ally
โจ๏ธ (9:44:02) | Advanced: EVM Opcodes, Encoding, and Calling
- abi.encode
- abi.encodePacked Thanks to Alex Roan for his help on this session!
- Example Contract Creation Transaction What REALLY is the ABI?
- EVM Opcodes
- More EVM Opcodes
- Solidity Cheatsheet
- abi.encode vs abi.encodePacked
โจ๏ธ (10:06:27) | Introduction to Encoding Function Calls Directly
โจ๏ธ (10:12:16) | Introduction to Encoding Function Calls Recap
โจ๏ธ (10:14:15) | Encoding Function Calls Directly
- Function Selector
- Function Signature
โจ๏ธ (10:28:45) | Verifying Metamask Transactions
- Check the address
- Check the function selector
- Decode the calldata
โจ๏ธ (10:36:31) | Lesson 11 Recap
(back to top) โฌ๏ธ
๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐
๐๐๐๐๐๐๐๐๐๐๐๐๐๐๐
๐ป Code: https://github.com/Cyfrin/foundry-defi-stablecoin-f23
โญ๏ธ (0:00:00) | Lesson 12: DeFi Stablecoins
- What is DeFi?
- DefiLlama
- Bankless
- MEV
- Aave
- My Previous Aave Video on Shorting Assets
- DAI
- Uniswap
- Maximal Extractable Value (MEV)
โจ๏ธ (0:09:17) | Code Walkthrough
โจ๏ธ (0:12:23) | What is a stablecoin (But actually)
โจ๏ธ (0:40:41) | DecentralizedStableCoin.sol
โจ๏ธ (0:54:44) | DSCEngine.sol Setup
โจ๏ธ (1:04:49) | Deposit Collateral
- Other DeFi Examples:
โจ๏ธ (1:22:51) | Getting the value of our collateral
โจ๏ธ (1:39:11) | Health Factor
โจ๏ธ (1:46:02) | Minting the DSC
โจ๏ธ (1:47:28) | Deploy Script
โจ๏ธ (2:13:45) | depositCollateralAndMintDsc
โจ๏ธ (2:16:12) | redeemCollateral
โจ๏ธ (2:44:45) | Refactoring
โจ๏ธ (2:56:55) | Leveling up your testing skillz
โจ๏ธ (3:13:50) | Fuzz (Invariant) Testing
โจ๏ธ (3:27:18) | Open-based Fuzz tests
โจ๏ธ (3:46:55) | revert_on_fail = true
โจ๏ธ (4:03:57) | Redeeming Collateral
โจ๏ธ (4:09:42) | Minting DSC
โจ๏ธ (4:15:01) | Debugging Fuzz Tests
โจ๏ธ (4:23:30) | Price Feed Handling
โจ๏ธ (4:39:57) | Note on audit preparedness
โจ๏ธ (4:44:38) | Lens Protocol
- Special Guest Nader
- Lens Protocol
QR Code for Lesson 12 Arbitrum:
QR Code for Lesson 12 Sepolia:
(back to top) โฌ๏ธ
๐ป Code: https://github.com/Cyfrin/foundry-upgrades-f23
โญ๏ธ (4:47:00) | Lesson 13: Upgradable Contracts & Proxies
- Parameter
- Social Migrate
- Proxy
โจ๏ธ (5:02:20) | Delegatecall
โจ๏ธ (5:10:24) | Small Proxy Example
- UUPS vs Transparent
- Abstract Contracts
โจ๏ธ (5:34:24) | Initializer
โจ๏ธ (5:59:40) | Testnet Demo
(back to top) โฌ๏ธ
Plutocracy is bad! Don't default to ERC20 token voting!!
๐ป Code: https://github.com/Cyfrin/foundry-dao-f23
โญ๏ธ (6:05:45) | Lesson 14 | DAOs & Governance
- What is a DAO?
- Special Guest Juliette
- How to build a DAO
- That's Patrick
- PY Code
- Python Video
- Special Guest Harrison
(back to top) โฌ๏ธ
Developers 100% should know all about this! Don't leave the course without at least watching this section!
๐ฅ๏ธ Code: https://github.com/PatrickAlphaC/denver-security
โญ๏ธ (7:21:12) | Lesson 15 | Security & Auditing
โจ๏ธ (7:24:47) | What is a smart contract audit?
โจ๏ธ (7:31:11) | What tools do security professionals use?
โจ๏ธ (7:42:32) | Manual Review with Tincho
โจ๏ธ (7:56:35) | Formal Verification
- Common Attacks
- Best Practices
- Attacks
- Damn Vulnerable Defi
- Ethernaut
- Top Smart Contract Auditors
- Some Smart Contract Auditors:
(back to top) โฌ๏ธ
๐๐๐๐๐๐๐๐๐๐๐๐ Completed The Course! ๐๐๐๐๐๐๐๐๐๐๐๐
- Top 10 learning resources
- Patrick Collins
- CryptoZombies
- Alchemy University
- Speed Run Ethereum
- Ethereum.org
Be sure to check out project grant programs!
And make today an amazing day!
(back to top) โฌ๏ธ
Transparency is important! So we want to disclose any potential conflicts that might have affected my judgement so you can pick tools that are right for you. Patrick is co-founder of Alpha Chain, a blockchain infrastructure company. Alpha Chain runs Chainlink, Ethereum, Binance, Polygon, Harmony, Solana, Moonbeam, and Moonriver blockchain services. Alpha Chain often works with Alchemy and receives discounted services. Patrick is the co-founder of Cyfrin, and they do smart contract security & auditing services. Patrick is also the co-founder of Chain Accel, who is an advisor on the Peeranha project. Patrick is an advisor on the Chainlink project. The Cyfrin team often does buisness on the Arbitrum L2.
Because of all this, I have added alternatives to each section where we suggest a tool. This video & course was created and sponsored solely by the Cyfrin team.
(back to top) โฌ๏ธ
We are THRILLED to have received donations from the BadgerDAO protocol.
BadgerDAO is a decentralized collective of builders supporting community driven growth for Bitcoin across DeFi. Deposit to earn Yield-Bearing Rewards that automate and optimize yield from Aura and Convex positions.
(back to top) โฌ๏ธ
Thanks to everyone who is taking, participating in, and working on this course. It's been a passion project and a data dump of everything I've learnt in the web3 space to get you up to speed quickly. Also, a big thank you to Cyfrin & Chain Accel for encouraging this course to come to light, and many, many, many people from the community.
And thanks to the Cyfrin team for making this possible!
(back to top) โฌ๏ธ