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 |