0xbageltoes / Journey-to-become-a-Blockchain-Engineer

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

Ethereum Transaction On a Live Blockchain
- Wallet Creation
- Etherscan
- Multiple Accounts
- Mnemonic , Public & Private keys
- 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/whats going on Inside the 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
- 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

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

About

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


Languages

Language:Solidity 78.6%Language:Python 21.4%