I'm sharing everything I'm learning to become a Blockchain Engineer
| Blockchain |
| - Bitcoin |
| - Ethereum |
| - Smart Contracts |
| - Bitcoin Vs Ethereum |
| - Oracle Problem & Solution |
| - Hybrid Smart Contracts |
| - Chainlink |
| - Importance of Ethereum |
| - Chainlink features |
| - Summary |
| Features of blockchain and smart contracts |
| - Decentralized |
| - Transparency & Flexibility |
| - Speed & Efficiency |
| - Security & Immutability |
| - Removal of Counterparty risks |
| - Trust Minimized Agreements |
| - Summary |
| DAOs |
| A Live Ethereum Transaction |
| - Wallet Creation |
| - Etherscan |
| - Multiple Accounts |
| - Public and private keys, as well as mnemonics |
| - Mnemonic vs Private vs Public keys |
| - Mainnet & Testnets |
| - Initiating our first transaction |
| - Transaction details |
| - Gas fees, Transaction fees, Gas limit, Gas price |
| - Gas vs Gas price vs Gas Limit vs Transaction fee |
| - Gas estimator |
| How Blockchain Works/What Happens Inside Blockchain |
| - Hash or Hashing or SHA256 |
| - Block |
| - Blockchain |
| - Decentralized/Distributed Blockchain |
| - Tokens/Transaction History |
| - Summary |
| Signing and Verifying a Transaction |
| - Public & Private Keys |
| - Signatures |
| - Transactions |
| - Summary |
| Concepts are same |
| - Nodes |
| - Centralized entity vs Decentralized Blockchain |
| - Transactions are Listed |
| - Consensus |
| - proof of work/Sybil resistance mechanism |
| - Blocktime |
| - Chain selection rule |
| - Nakamoto consensus |
| - Block Confirmations |
| - Block rewards & transaction fees |
| - Sybil attack |
| - 51% attack |
| - Drawbacks of pow |
| - proof of stake/sybil resistance mechanism |
| - Validators |
| - pros & cons of pos |
| - Scalability problem & Sharding solution |
| - Layer 1 & Layer 2 |
| - Rollups |
| - Summary |
| Solidity |
| Remix IDE & its features |
| - Solidity version |
| - Defining a Contract |
| - Variable types & Declaration |
| - Solidity Documentation |
| - Initializing |
| - Functions or methods |
| - Deploying a Contract |
| - Public , Internal , private , External Visibility |
| - Modifying a Variable |
| - Scope |
| - View functions |
| - Pure function |
| - Structs |
| - Intro to storage |
| - Arrays |
| - Dynamic array |
| - Fixed array |
| - Adding to an array |
| - Compiler Errors |
| - Memory Keyword |
| - Storage keyword |
| - Mappings Datastructure |
| - SPDX license |
| - Deploying to a live network |
| - Interacting with deployed contracts |
| - EVM |
| - Summary |
| StorageFactory |
| - Factory pattern |
| - New contract StorageFactory |
| - Import 1 contract into another |
| - Deploy a Contract from a Contract |
| - Track simple storage contracts |
| - Interacting with Contract deployed Contract |
| - Calling Store & Retrieve Functions from SF |
| - Address & ABI |
| - Compiling & storing in SS through SF |
| - Adding Retrieve Function |
| - Compiling |
| - Making the Code lil bit Simpler |
| - Additional Note |
| - Inheritance |
| - Overrides |
| - Recap |
| Fund me |
| - purpose of this contract |
| - Payable function , wei , gwei & ether |
| - Mapping , msg. sender , msg.value |
| - Funding |
| - ETH -> USD /conversion |
| - Deterministic problem & Oracle solution |
| - Centralized Oracles |
| - Decentralized Oracle Networks |
| - Chainlink Datafeeds |
| - Chainlink Code documentation on ETH/USD |
| - Importing Datafeed code from Chainlink NPM package |
| - Interfaces |
| - ABI/Application Binary Interface |
| - Interacting with an Interface Contract |
| - Finding the Pricefeed Address |
| - Deploying |
| - Getprice function |
| - Tuples |
| - Typecasting |
| - deploying |
| - Clearing unused Tuple Variables & Deploying |
| - Making the contract look Clean |
| - Wei/Gwei Standard (Matching Units) |
| - getting the price using Get conversion rate |
| - deploying |
| - Safemath & Integer Overflow |
| - Libraries |
| - Setting Threshold |
| - Require statement |
| - Revert |
| - Deplying & Transaction |
| - Withdraw Function |
| - Transfer , Balance , This |
| - Deploying |
| - Owner , Constructor Function |
| - Deploying |
| - Modifiers |
| - Deploying |
| - Resetting the Funders Balances to Zero |
| - For loop |
| - Summary |
| - Deploying & Transaction |
| - Forcing a Trasacttion |
| - Libraries |
| - Advanced Solidity Immutable & Constant |
| - Custom Errors |
| - Receive & Fallback |
| Web3. py SimpleStorage |
| - Limitations of Remix |
| - VScode , Python , Solidity Setup |
| - VScode features |
| - Testing python install & Troubleshooting |
| - Creating a new folder |
| - SimpleStorage. sol |
| - Remember to save |
| - VScode Solidity Settings |
| - Python Formatter & settings |
| - Author's recommended Settings |
| - working with python |
| - Reading our solidity file in python |
| - Running in Python |
| - Keyboard Shortcuts |
| - Py-Solc-x |
| - Importing solcx |
| - Compiled_sol |
| - Bracket pair colorized |
| - pysolcx documentation |
| - Printing Compiled_sol |
| - Comparison wih remix (Lowlevelstuffs , ABI) |
| - Saving Compiled Code/writing |
| - import Json |
| - Json formatting/settings |
| - Deploying in Python (Bytecode , ABI) |
| - Which Blockchain/Where to deploy |
| - Ganache Chain |
| - Ganache UI |
| - Introduction to Web3. py |
| - pip install web3 |
| - import web3 |
| - Http/Rpc provider |
| - Connecting to Ganache(RPC server,Documentation,Chain ID,address,Privatekey) |
| - Deploy to Ganache |
| - Building a Transaction |
| - Nonce |
| - Getting Nonce |
| - Create a Transaction |
| - Transaction Parameters |
| - Signing Our Transaction(signed_txn) |
| - Never Hardcode your Private keys |
| - Environment Variables |
| - Setting Environment variables |
| - Limitations of Exporting Environment Variables |
| - Private key PSA |
| - Accessing Environment Variables |
| - .env file, .gitignore, pip install python-dotenv |
| - load_dotenv() |
| - Sending the signed Transaction |
| - Deployment |
| - Block confirmation(wait_for_transaction_reciept) |
| - interact/work with thee contract |
| - Address & ABI |
| - Retrieve() , Call & Transact |
| - Store function |
| - Creating Transaction(Store_transaction) |
| - Signing Transaction(signed_store_txn) |
| - Sending Transaction(send_store_tx,tx_receipt) |
| - Deployment |
| - some nice syntax & deployment |
| - ganache-cli |
| - install Nodejs |
| - install yarn |
| - Run ganache cli , ganache documentation |
| - update privatekeys,addresses,http provider |
| - open new terminal & deploy |
| - deploy to testnet/mainnet |
| - Infura, Alchemy |
| - Create project |
| - update the rinkeby url, Chain id , address & private key |
| - Deploying |
| - summary/recap |
| Brownie Simple Storage |
| - Brownie Intro & Features |
| - install Brownie |
| - 1st brownie simplestorage project |
| - Brownie Folders |
| - brownie compile & store |
| - brownie deploy |
| - brownie runscripts/deploy. py & default brownie network |
| - brownie Advantages over web3. py in deploying |
| - getting address & private key using Accounts package |
| - add default ganache account using index |
| - add accounts using Commandline |
| - add accounts using env variables |
| - adding wallets in yaml file and updating in account |
| - importing contract simplestorage |
| - importing & deploying in brownie vs web3. py |
| - recreating web3 .py script in brownie |
| - tests |
| - Deploying to a Testnet |
| - Brownie console |
| Brownie Fund Me |
| - Initial Setup |
| - Dependencies |
| - Remappings |
| - Rinkeby Deploy Script |
| - init.py |
| - Deploying to Rinkeby |
| - Deploying to ganache |
| - Mock |
| - Constructor Parameters |
| - Refactoring |
| - Deploying to a persistant ganache |
| - Adding network to brownie |
| - Withdraw and Fund |
| - Testing |
| - Default Network |
| - Mainnet fork |
| - Custom mainnet-fork |
| - Adding to Github |
| - Where should I run my tests? |
| SmartContract Lottery |
| - Decentralized Lottery |
| - Setup |
| - Wait..is this really decentralized? |
| - Could we make it decentralized? |
| - Chainlink Keepers |
| - Lottery.sol |
| - Main functions of Lottery.sol |
| - address payable[] |
| - require minimum payment |
| - getEntranceFee |
| - Testing |
| - Enum |
| - startLottery |
| - Randomness |
| - pseudorandom numbers |
| - True Randomness with Chainlink VRF |
| - Oracle Gas and Transaction Gas |
| - Request and Receive |
| - Kovan |
| - Gas Estimation Failed |
| - After Link transaction completes |
| - After transaction completes |
| - Request and Receive |
| - Asynchronous 2 Transactions |
| - Clarification |
| - endLottery |
| - returns(type variableName) |
| - fulfillRandomness |
| - override |
| - Modulo(Mod Operation %) |
| - Lottery Testing |
| - deploy_lottery.py |
| - get_account refactored |
| - contract_to_mock |
| - Contract.from_abi |
| - Adding vrfCoordinatorMock |
| - Start Lottery |
| - enter_lottery |
| - end_lottery |
| - Funding with LINK |
| - brownie interfaces |
| - waiting for callback |
| - Integration Tests Vs Unit Tests |
| - Unit Testing |
| - pytest.skip |
| - test_cant_enter_unless_started |
| - test_can_start_and_enter_lottery |
| - test_can_end_lottery |
| - test_can_pick_winner_correctly |
| - Events and Logs |
| - callBackWithRandomness |
| - Integration Test |
| - Test deployment |
| - Topics |
| - Conftest.py |
| Chainlink Mix |
| ERC20s, EIPs, and Token Standards |
| - Why make an ERC20? |
| - How do we build one of these tokens? |
| - Solidity 0.8 |
| - 1_deploy_token.py |
| Defi & Aave |
| - Decentralized Exchange(DEX) |
| - Depositing tokens/ Lending |
| - WETHGateway |
| - Interest Bearing Token (aToken) |
| - Why borrow? |
| - Stable Vs Variable Interest Rate |
| - Reward token / Governance token |
| - Programmatic interactions with Aave |
| - Qunt Defi Engineer |
| - No contract deployments here |
| - aave_borrow.py |
| - Converting ETH -> WETH |
| - Get the WETH interface |
| - Why not get_contract? |
| - aave_borrow.py |
| - Lending Pool |
| - LendingPool Address Provider |
| - Fixing Importing Dependencies |
| - deposit function |
| - getUserAccountData |
| - liquidation threshold |
| - Getting DAI conversion rate |
| - Aave Testnet Token Addresses |
| - Repaying |
| - Testing |
| NFTs |
| - ERC-721 |
| - Metadata |
| - Token URI |
| - Let's start Coding |
| - Initial Setup |
| - SimpleCollectible.sol |
| - Factory Contract |
| - _safeMint |
| - How do I "see" the NFT? |
| - Is this decentralized? |
| - Ethereum Size and dStorage |
| - IPFS |
| - deploy_and_create.py |
| - IPFS companion |
| - Testing |
| - What else with NFTs? |
| Advanced NFT |
| - Double Inherited Constructor |
| - tokenIDToBreed |
| - setTokenURI |
| - _isApprovedOrOwner |
| - Best Practice |
| - Advanced deploy_and_create.py |
| - Refactoring |
| - Deploying AdvancedCollectible |
| - Continuing our deploy script |
| - create_collectible.py |
| - Back to testing |
| - Unit Testing |
| - Integration Testing |
| - create_metadata.py |
| - get_breed |
| - sample_metadata.py |
| - Uploading Image to IPFS |
| - Download IPFS Command Line |
| - HTTP IPFS DOCS |
| - Alternative: Pinata |
| - Upload to Pinata |
| - Refactor to not re-upload to IPFS |
| - Setting the TokenURI |
| - End to End Mannual Test |
| Upgrades |
| - Not Really / Parameterize |
| - Who the admins? |
| - Are upgradeable smart contracts decentralized? |
| - Social YEET / Migration |
| - Proxies |
| - Biggest Gotchas |
| - Transparent Proxy Pattern |
| - Universal Upgradeable Proxies |
| - Gas Saver!! |
| - Diamond Pattern |
| - Coding Upgradeable Smart Contracts |
| - Box.sol |
| - Getting Proxy Contracts |
| - Hooking up a proxy to our implementation contract |
| - Initializer |
| - encoding the initializer function |
| - get_encode_function |
| - Assigning V2 to proxy |
| - Upgrade Python Function |
| - Testing our upgrades |
| - Testing our proxy |
| - Upgrades on a testnet |
| Full Stack Defi |
| - Staking and Depositing |
| - DappToken.sol |
| - TokenFarm.sol |
| - tokenIsAllowed |
| - Valued Staked Tokens |
| - issueTokens |
| - getUserTotalValue |
| - unStakeTokens |
| - Can this be reentrancy attacked? |
| - Scripts and Tests |
| - Testing |
| Front End / Full Stack |
| - React and Typescript |
| - create react app |
| - install packages |
| - Create React App Layout |
| - connecting your wallets |
| - Header Component |
| - Material-UI |
| - Sending brownie config to the UI |
| - Helper Config |
| - YourWallet |
| - State Hook |
| - Stake Form |
| - Calling Approve |
| - useContractFunction |
| - useEffect |
| - Notifications |
| - Make it pretty |
| Events and Logging in Solidity |
| - Events |
| Multicall |
| - Batch Requests |
| Leveraged Trading in DeFi |
| - AAVE UI |
| - Doing Programmatically |
| Flash Loans |
| Ethers.js Simple Storage |
| - Installation |
| - Tiny JavaScript Refresher |
| - Asynchronous programming in JavaScript |
| - Compiling our Solidity |
| - Ganache & Networks |
| - Introduction to Ethers.js |
| - A note on Await Keyword |
| - Adding Transaction Overrides |
| - Transaction Receipts |
| - Sending a "raw" transaction in etherjs |
| - Interacting with Contracts in Ethersjs |
| - Environment variables |
| - Better Private Key Management |
| - Optional Prettier Fromatting |
| - Deploying to a Testnet or a Mainnet |
| Hardhat Simple Storage |
| - Hardhat |
| - Hardhat Setup |
| - Deploying SimpleStorage from Hardhat |
| - Networks in Hardhat |
| - Programatic Verification |
| - Interacting with Contracts in Hardhat |
| - Custome Hardhat Tasks |
| - Hardhat Localhost Node |
| - The Hardhat Console |
| - Running Tests |
| - Hardhat Gas Reporter |
| - Solidity Coverage |
| - Hardhat Waffle |
| Hardhat Fund Me |
| - Hardhat Setup |
| - Linting |
| - Importing from NPM |
| - Hardhat Deploy |
| - Mocking & helper-hardhat-config |
| - Utils Folder |
| - Testnet Demo |
| - Solidity Style Guide |
| - Testing FundMe |
| - Breakpoints & Debugging |
| - Gas |
| - Console.log & Debugging |
| - Testing FundMe II |
| - Storage in Solidity |
| - Gas Optimizations using storage keyword |
| - Solidity Chainlink Style Guide |
| - Staging Tests |
| - Running Scripts on a Local Node |
| - Adding scripts to your package.json |
| HTML / JavaScript Fund Me |
| - Intro to front end / full stack |
| - How websites work with web3 wallet? |
| - HTML Setup |
| - Connecting HTML to MetaMask |
| - JavaScript in it’s own files |
| - ES6 (FrontEnd JS) VS NodeJS |
| - Sending a Transaction from a Website |
| - Resetting an Account in MetaMask |
| - Listening for Events and Completed Transactions |
| - Input Forms |
| - Reading from the blockchain |
| - Withdraw Function |
| Hardhat Smart Contract Lottery / Raffle |
| - Hardhat Setup |
| - Raffle.sol Setup |
| - Events |
| - Chainlink VRF (Randomess in Web3) |
| - Implementing Chainlink VRF |
| - Hardhat Shorthand |
| - Implementing chainlink VRF (The Request) |
| - Implementing Chainlink VRF (The Fulfill) |
| - Introduction to Chainlink Keepers |
| - Implementing Chainlink Keepers (checkUpkeep) |
| - Enums |
| - Implementing Chainlink Keepers (checkUpkeep continued) |
| - Implementing Chainlink Keepers (performUpkeep) |
| - Code Cleanup |
| - Mock Chainlink VRFCoordinator |
| - Raffle.sol Unit Tests |
| - Testing Events & Chai Matchers |
| - Raffle.sol Unit Tests Continued |
| - Hardhat Methods & “Time Travel” |
| - Callstatic |
| - Massive Promise Test |
| - Raffle.sol Staging Tests |
| - Testing on a Testnet |
| NextJS Smart Contract Lottery |
| - NextJS Intro |
| - NextJS Setup |
| - Manual Header I |
| - React Hooks |
| - Mannual Header II |
| - useEffect Hook |
| - Local Storage |
| - isWeb3Enable Loading |
| - web3uikit |
| - Introduction to Calling Functions in NextJS |
| - Automatic Constant Value UI Updater |
| - runContractFunction |
| - useState |
| - Calling Functions in NextJS |
| - useNotification |
| - Reading and Displaying Contract Data |
| - A note about onSuccess |
| - Tailwind & Styling |
| - Introduction to Hosting your Site |
| - IPFS |
| - Hosting on IPFS |
| - Hosting on IPFS & Filecoin using Fleek |
| - Filecoin Overview |
| - Summary |
| Hardhat Starter Kit |
| Hardhat ERC20s |
| - What is an ERC? |
| - What is an EIP? |
| - What is an ERC20? |
| - Why make an ERC20? |
| - Manually Creating an ERC20 Token |
| - Creating an ERC20 Token with OpenZeppelin |
| - Recap |
| Hardhat Defi and Aave |
| - What is Aave? |
| - Programatic Borrowing and Lending |
| - WETH (Wrapped ETH) |
| - Forking Mainnet |
| - Depositing into Aave |
| - Borrowing from Aave |
| - Repaying with Aave |
| The Ultimate NFT |
| - Hardhat Setup |
| - Basic NFT |
| Random NFT |
| - Mapping ChainLink VRF Requests |
| - Creating Rare NFTs |
| - Setting the NFT Image |
| - Setting an NFT Mint Price |
| - Recap |
| Deploy |
| - Uploading token images with Pinata |
| - Uploading Metadata with Pinata |
| - NFT tests |
| Dynamic SVG On-Chain NFT |
| - What is a SVG? |
| - Initial Code |
| - Base64 Encoding |
| Advanced Section Encoding, Opcodes and Calls |
| - abi.encode & abi.encodePacked |
| - Introduction to Encoding Function Calls Directly |
| - Encoding Recap |
| - Encoding Function Calls Directly |
| Dynamic SVG On-Chain NFT |
| - Creating an NFT TokenURI On-Chain |
| - Making the NFT Dynamic |
| - Dynamic SVG On-Chain NFT Deploy Script |
| Full Stack NFT Marketplace |
| - NFT Marketplace Contracts |
| - Hardhat Setup |
| - NFTMarketplace.sol |
| - listItem function |
| - buyItem function |
| - Reentrancy Attacks |
| - Marketplace.sol Continued |
| - NFTMarketplace Deploy Script |
| - NFT Marketplace Tests |
| - NFT Marketplace Scripts |
| Moralis Front End |
| - NextJS Setup |
| - Adding Tailwind |
| - Introducing to Indexing in Web3 |
| - What is Moralis? |
| - Connecting Moralis to our Local Hardhat Node |
| - Moralis Event Sync |
| - Resetting the Local Chain |
| - Moralis Cloud Functions |
| - Moralis Cloud Functions II |
| - Querying the Moralis Database |
| - Rendering the NFT Images |
| - Updating the Listing |
| - Buy NFT Listing |
| - Sell Page Listing NFTs for Sale |
| The Graph Front End |
| - What is The Graph? |
| - Building a Subgraph |
| - Deploying our Subgraph |
| - Reading from The Graph |
| - Hosting our Dapp |
| Hardhat Upgrades |
| - Delegate call |
| - Small Proxy Example |
| - Function Selector Clashes |
| - Transparent Upgradeable Proxy Contract |
| Build a DAO |
| - What is a DAO? |
| - How to build a DAO? |
| Security and Auditing |
| - What is an Audit? |
| - Process |
| - Slither |
| - Fuzzing and eth-security-toolbox |
| Deep Dive into DEFI |
| Traditional Finance System |
| - Income Statement |
| - Fractional Reserve |
| - The multiplier effect and the money supply |
| - Bank Notes |
| - Bank notes and checks |
| - Giving out loans without giving out gold |
| - Reserve ratios |
| - Reserve ratio requirement |
| - Leverage |
| - Reserve Bank |
| - Treasury (government debt) |
| - Open market operations |
| - The Federal Funds Rate |
| - More on the fed funds rate |
| - How do target interest rates differ from money supply? |
| - What happened to the gold? |
| - Overall discussion |
| - The discount rate |
| - Repurchase agreements (repo transactions) |
| - Fractional reserve banking |
| - Deposit insurance |
| - Big picture |
| - LIBOR |
| Connecting TradFi and DeFi |
| Stablecoins |
| - Volatility |
| - Liquidity |
| - Collateral |
| - Floating and Fixed Interest Rates |
| - Currency pegs |
| Types of stablecoins and comparison |
| - USDT |
| - USDC |
| - BUSD |
| - DAI |
| - Tether(USDT) |
| MakerDAO |
| - DAI and MakerDAO |
| Mechanism Design of Maker (DAI and MKR) |
| - Dual Token Mechanism |
| - Reserve Mechanism |
| - Creating DAI and How it works |
| - Maintaining Stability |
| - Crashes, Liquidations |
| - How is this different from lending and borrowing? |
| - Transparency |
| - Global Settlement |
| - Interacting with a Maker Vault |
| Smart contract module of MakerDAO |
| Decentralized Exchanges (DEXs) |
| - Stocks |
| - Financial Instruments |
| - Order Book |
| - Market |
| - Exchange |
| - Broker-Dealer |
| - Market Makers |
| - Market Index |
| - Long Trade vs. Short Trade |
| - Leverage |
| - Margin Trading |
| - Counterparty risks |
| - Trade Slippage |
| - DEX risk |
| - How a Decentralized Cryptocurrency Exchange Works |
| - Atomic Swaps |
| Liquidity pools and automated market makers |
| - Liquidity pools |
| - AMM |
| - impermanent loss |
| - Rug Pull |
| Uniswap |
| High Level Working of Uniswap |
| - Creating markets using Uniswap Exchange Factories |
| - Adding liquidity to markets via Uniswap Exchanges |
| - Swapping Ether for Tokens |
| - Swapping tokens for Ether |
| - Swapping tokens for tokens |
| Comparison of Unswap v1 vs v2 vs v3 |
| - Uniswap V1 |
| - Uniswap V2 |
| - Uniswap V3 |
| Frontrunning and sandwich attacks |
| - How is it related to slippage? |
| - MemPool |
| Balancer |
| - Index |
| - Index fund |
| - What is Balancer? |
| - Liquidity bootstrapping pools |
| How does the balancer work? |
| Smart Contract walkthrough |
| - BFactory.sol |
| - BPool.sol |
| Curve Finance |
| - Why not Uniswap? |
| - How does curve finance work? |
| - Math behind Curve Finance |
| Bancor |
| Smart contract walkthrough |
| - Vault.sol |
| - MasterVault.sol |
| - ExternalProtectionVault.sol |
| - ExternalRewardsVault.sol |
| - BancorArbitrage.sol |
| Carbon |
| - Asymmetric Liquidity |
| - Overview |
| - features of Carbon |