Skip to content

spo0ds/Journey-to-become-a-Blockchain-Engineer

Repository files navigation

Journey-to-become-a-Blockchain-Engineer

I'm sharing everything I'm learning to become a Blockchain Engineer

Blockchain

Day 1

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

Day 2

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

Day 3

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

Day 4

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

Day 5

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

Day 6

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

Day 7

- 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

Day 8

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

Day 9

- 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

Day 10

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

Day 11

Brownie Fund Me
- Initial Setup
- Dependencies
- Remappings
- Rinkeby Deploy Script
- init.py
- Deploying to Rinkeby
- Deploying to ganache
- Mock
- Constructor Parameters

Day 12

- 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?

Day 13

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

Day 14

- 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

Day 15

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

Day 16

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?

Day 17

- 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

Day 18

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?

Day 19

Advanced NFT
- Double Inherited Constructor
- tokenIDToBreed
- setTokenURI
- _isApprovedOrOwner
- Best Practice

Day 20

- Advanced deploy_and_create.py
- Refactoring
- Deploying AdvancedCollectible
- Continuing our deploy script
- create_collectible.py
- Back to testing
- Unit Testing

Day 21

- 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

Day 22

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

Day 23

- 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

Day 24

Full Stack Defi
- Staking and Depositing
- DappToken.sol
- TokenFarm.sol
- tokenIsAllowed
- Valued Staked Tokens
- issueTokens
- getUserTotalValue

Day 25

- unStakeTokens
- Can this be reentrancy attacked?
- Scripts and Tests

Day 26

- Testing

Day 27

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

Day 28

- YourWallet
- State Hook
- Stake Form
- Calling Approve
- useContractFunction
- useEffect
- Notifications
- Make it pretty

Day 29

Events and Logging in Solidity
- Events
Multicall
- Batch Requests

Day 30

Leveraged Trading in DeFi
- AAVE UI
- Doing Programmatically

Day 31

Flash Loans

Day 32

Ethers.js Simple Storage
- Installation
- Tiny JavaScript Refresher
- Asynchronous programming in JavaScript
- Compiling our Solidity
- Ganache & Networks
- Introduction to Ethers.js

Day 33

- 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

Day 34

Hardhat Simple Storage
- Hardhat
- Hardhat Setup
- Deploying SimpleStorage from Hardhat
- Networks in Hardhat

Day 35

- 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

Day 36

Hardhat Fund Me
- Hardhat Setup
- Linting
- Importing from NPM
- Hardhat Deploy
- Mocking & helper-hardhat-config
- Utils Folder
- Testnet Demo

Day 37

- Solidity Style Guide
- Testing FundMe
- Breakpoints & Debugging
- Gas
- Console.log & Debugging
- Testing FundMe II

Day 38

- 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

Day 39

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

Day 40

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)

Day 41

- Introduction to Chainlink Keepers
- Implementing Chainlink Keepers (checkUpkeep)
- Enums
- Implementing Chainlink Keepers (checkUpkeep continued)
- Implementing Chainlink Keepers (performUpkeep)
- Code Cleanup

Day 42

- 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

Day 43

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

Day 44

- 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

Day 45

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

Day 46

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

Day 47

The Ultimate NFT
- Hardhat Setup
- Basic NFT

Day 48

Random NFT
- Mapping ChainLink VRF Requests
- Creating Rare NFTs
- Setting the NFT Image
- Setting an NFT Mint Price
- Recap

Day 49

Deploy
- Uploading token images with Pinata
- Uploading Metadata with Pinata
- NFT tests

Day 50

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

Day 51

Dynamic SVG On-Chain NFT
- Creating an NFT TokenURI On-Chain
- Making the NFT Dynamic
- Dynamic SVG On-Chain NFT Deploy Script

Day 52

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

Day 53

Moralis Front End
- NextJS Setup
- Adding Tailwind
- Introducing to Indexing in Web3
- What is Moralis?
- Connecting Moralis to our Local Hardhat Node

Day 54

- Moralis Event Sync

Day 55

- Resetting the Local Chain
- Moralis Cloud Functions
- Moralis Cloud Functions II
- Querying the Moralis Database
- Rendering the NFT Images

Day 56

- Updating the Listing
- Buy NFT Listing
- Sell Page Listing NFTs for Sale

Day 57

The Graph Front End
- What is The Graph?
- Building a Subgraph
- Deploying our Subgraph
- Reading from The Graph
- Hosting our Dapp

Day 58

Hardhat Upgrades
- Delegate call
- Small Proxy Example
- Function Selector Clashes
- Transparent Upgradeable Proxy Contract

Day 59

Build a DAO
- What is a DAO?
- How to build a DAO?

Day 60

Security and Auditing
- What is an Audit?
- Process
- Slither
- Fuzzing and eth-security-toolbox

Day 61

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

Day 62

- 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

Day 63

Connecting TradFi and DeFi
Stablecoins
- Volatility
- Liquidity
- Collateral
- Floating and Fixed Interest Rates
- Currency pegs
Types of stablecoins and comparison
- USDT
- USDC
- BUSD
- DAI

Day 64

- 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

Day 65

Smart contract module of MakerDAO

Day 66

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

Day 67

- DEX risk
- How a Decentralized Cryptocurrency Exchange Works
- Atomic Swaps
Liquidity pools and automated market makers
- Liquidity pools
- AMM
- impermanent loss
- Rug Pull

Day 68

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

Day 69

Balancer
- Index
- Index fund
- What is Balancer?
- Liquidity bootstrapping pools
How does the balancer work?
Smart Contract walkthrough
- BFactory.sol
- BPool.sol

Day 70

Curve Finance
- Why not Uniswap?
- How does curve finance work?
- Math behind Curve Finance

Day 71

Bancor
Smart contract walkthrough
- Vault.sol
- MasterVault.sol
- ExternalProtectionVault.sol
- ExternalRewardsVault.sol

Day 72

- BancorArbitrage.sol

Day 73

Carbon
- Asymmetric Liquidity
- Overview
- features of Carbon