Blockchain and Smart Contract Basics
- What is Blockchain and how does it work?
- Centralized vs. Decentralized vs. Distributed
- Blockchain vs. Databases
- Bitcoin vs Ethereum
- What are Smart Contracts?
- How are Smart Contracts used?
Smart Contract Programming Basics
- Advantages and Drawbacks of Smart Contracts
- Layer 1 vs. Layer 2
- High-Level Language vs. Low-Level
- Languages in Comparison Solidity, Vyper, others
- Smart Contracts with Solidity
- The Layout of a Solidity File
- LAB TASKS (Lab 1)
- Types of Variables in Solidity
- Function/Variable Visibility
- Smart Contract Constructors
- Setter- and Getter-Functions
Understanding Decentralized Information and Web3
- Blockchain Access structures and Architectures
- Remote Blockchain Nodes vs. Local Blockchain Nodes
- Blockchain Access vs. centralized RESTful API
- Understanding Web3.js API
- Understanding Transactions and Consensus
- Private Keys, Public Keys and Signatures
- Understanding privacy on pubic Blockchains
- Understanding the architecture of KeyStore’s such as MetaMask or MIST
- LAB TASKS (Lab 2 – Ropsten Test-Ether and MetaMask)
- Installing and Configuring MetaMask
- Obtaining Ropsten (or Testnet) Ether
- Tracing Ether through Block-Explorers
- Understanding Infura
Basics of Ethereum and the EVM
- Ethereum Denominations
- Understanding EVM and the ABI Interface
- Calls vs. Transactions
- Concurrency and Events
- Use cases of Events
- LAB TASKS (Lab 3 Web3JS Operations + Lab 4 Events)
- Install and Use Ganache
- Work with Web3.js
- Work with Infura
- Define Events
- Listen and React to Events
Solidity Advanced: Modifiers, Mappings, Structs and Inheritance
- Understanding Functions, Mappings and Structs
- When to use Modifiers
- Libraries vs. Inheritance
- LAB TASKS (Lab 5 Modifiers, 6 Mappings and Structs, Lab 7 Inheritance)
- Understand and use Modifiers
- Add Mappings and Structs
- Use Inheritance to increase auditability
Understanding Deployment and Costs
- Understand Development and Deployment Cycles
- Understanding Solidity Compilation and Deployment
- Gas and Gas-Costs
- Upgradeability and Data Migration Techniques
- Understand the moving Parts: Compiler, Blockchain, API, KeyStore
- LAB TASKS (Lab 8 Deployment, Lab 9 Tie it together)
- Changing from strings to bytes (save gas)
- Deploy using Ropsten Test-Ether
- Understand the difference when using a real Blockchain
- Use a fully functioning distributed Application
Mining, Proof of Work vs. Proof of Authority
- What is Mining in PoW?
- How blocks are generated
- PoW vs. PoA (vs. PoS)
- Understanding Go-Ethereum or Ganache/TestRPC for local development
- Understanding Private Blockchains vs. Public Blockchains
- LAB TASKS (Lab 10 Mining)
- Installing and using Ganache
- Installing and using Go-Ethereum
- Connecting to Ganache/Go-Ethereum from Remix and Web3.js
- Interact with the Blockchain from HTML/JS
Current Problems, Solutions, Outlook, Serenity
- Ethereum Now and Ethereum Future
- Where we are at with Ethereum
- Where Ethereum is heading to
- Serenity
- PoS + PoW to PoS
- Sharding
- Recommended Newsletters/Groups
Working in Teams, Testing and Versioning
- Understanding what Truffle is
- Comparison to Embark
- How Manage Code for Teams
- Understanding Migrations
- Understanding Unit-Testing with Truffle
- LAB TASKS (Lab 11 Truffle setup, Lab 12 Truffle Unit Testing)
- Download and Setup Truffle
- Adapt the standard Truffle-Project
- Write A Unit Test
IPFS and distributed File-Storage
- What is IPFS
- Comparison between IPFS, FileCoin, Swarm, Sia, Storj
- LAB TASK (Lab 13 – IPFS)
- Install and work with IPFS
- Upload and retrieve a fully decentralized file
Bonus Section: Compilation
- LAB TASK (Lab 14 – Compilation)
- Compile a Solidity File with a command-line compiler