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
Lab Overview
Lab 0 – Understanding Components
- In this Lab we discuss the components used, where to get them and how to install them.
Lab 1 – Variables
- In this Lab you will get to know Remix and run simple Smart Contracts
Lab 2 – Ropsten and MetaMask
- In Lab you will get Ether from the Ropsten or Rinkeby Testnet and trace the Ethers on their way to the browser-plugin MetaMask.
Lab 3 – Web3.JS Operations
- During this Lab you will understand what Web3.JS is and how it is used to retrieve Information.
Lab 4 – Events
- Here you will learn a classic use-case for events to overcome concurrent workflow issues
Lab 5 – Modifiers
- In this Lab we will work with modifiers
Lab 6 – Mappings and Structs
- Mappings and Structs are powerful data-structures which you will learn in this Lab
Lab 7 – Inheritance
- When using Solidity it’s good to keep things clear and small to be able to audit it. In this Lab we discuss Inheritance
Lab 8 – Gas-Costs and Deployment
- In this Lab you will learn how to optimize the smart contract, deploy the contract and what to pay attention to in practice.
Lab 9 – Final DApp, Tie it Together
- We put all the components together and work with the final distributed Application.
Lab 10 – Mining
- During this lab you will see the difference of mining in a proof of authority consensus network and a proof or work network.
Lab 11 – Truffle Setup
- This Lab will teach how Truffle can be used to work in teams and with code locally. We will install and adapt the truffle default workflow.
Lab 12 – Truffle Unit Tests
- In this Lab we will do one of the most important steps during Contract Development: Create Unit-Tests for our Smart Contract
Lab 13 – IPFS
- During this Lab you will create a fully decentralized file-storage which will store files on IPFS and pointers on Ethereum
Bonus Lab – Solidity Compilation
- In this Lab you will learn how to manually compile a solidity file with the command line solidity compiler