1. What is Ethereum?
    • Introduction
    • A Short History Lesson
    • Link to Original Bitcoin White Paper
    • What is Ethereum?
    • Interfacing with Ethereum Networks
    • Metamask Setup
    • Ethereum Accounts
    • Receiving Ether
    • What’s a Transaction?
    • Basic Blockchains
    • Block Time
    • Smart Contracts
    • The Solidity Programming Language
    • Our First Contract
    • Contract Structure
    • Function Declarations
    • Testing with Remix
    • Redeploying Contracts
    • Behind the Scenes of Deployment
    • More on Running Functions Than You Want to Know
    • Wei vs Ether
    • Gas and Transactions
    • Mnemonic Phrases
    • Getting More Ether
    • Smart Contracts with Solidity
    • Solidity – Language of Smart Contracts
  2. Installing Solidity & Ethereum Wallet
    • Basics of Solidity by Example: Subcoin Smart Contract
    • Layout of a Solidity Source File & Structure of Smart Contracts
    • General Value Types (Int, Real, String, Bytes, Arrays, Mapping, Enum, address)
    • Ether Units, Time Units
    • Globally Available Variables & Functions
    • Operators: Arithmetic, Logical & Bitwise Operators
    • Control Structure (if-else, for, while, Do-While)
    • Scoping and Declarations
    • Input Parameters and Output Parameters
    • Function Calls & Return Types
    • Function Modifiers
    • Fallback Function
    • Abstract Contract
    • Creating Contracts via “new” Operator
    • Inheriting Smart Contracts
    • Importing Smart Contracts & Compiling Contracts
    • Events & Logging
    • Exceptions
    • Don’t Skip! Node JS Versioning
    • Contract Deployment
    • Boilerplate Requirements
    • Project File Walkthrough
    • Syntax Highlighters
    • Compiling Solidity
    • The Compile Script
    • Testing Architecture
    • Running Windows?
    • Installing Modules
    • Web3 Versioning
    • Web3 Providers
    • Testing with Mocha
    • Mocha Structure
    • Fetching Accounts from Ganache
    • Refactor to Async/Await
    • Deployment with Web3
    • Deployed Inbox Overview
    • Asserting Deployment
    • Web3 Version Fix
    • Verifying the Initial Message
    • Testing Message Updates
    • Deployment with Infura
    • Infura Signup
    • Wallet Provider Setup
    • Deployment to Rinkeby
    • Observing Deployment on Etherscan
    • Deployed Contracts in Remix
    • Complete Example: Crowd Funding Smart Contract
    • Complete Example: Voting Ballot Smart Contract
    • Advanced Smart Contracts
    • The Lottery Contract
    • Lottery Design
    • Basic Solidity Types
    • Starting the Lottery Contract
    • The Message Global Variable
    • Overview of Arrays
    • Overview of Mappings and Structs
    • Big Solidity Gotcha
    • Entering the Lottery
    • Validation with Require Statements
    • The Remix Debugger
    • Psuedo Random Number Generator
    • Selecting a Winner
    • Sending Ether from Contracts
    • Resetting Contract State
    • Requiring Managers
    • Function Modifiers
    • Returning Players Array
    • Contract Review
    • New Test Setup
    • Test Project Updates
    • Test Helper Review
    • Asserting Deployment
    • Entering the Lottery
    • Asserting Multiple Players
    • Try-Catch Assertions
    • Testing Function Modifiers
    • End to End Test
  3. Building Interactive Front-Ends
    • Ethereum App Architecture
    • Application Overview
    • Getting Started with Create-React-App
    • Multiple Web3 Instances
    • Web3 Setup
    • Deploying the Lottery Contract
    • Local Contract Instances
    • Rendering Contract Data
    • Instance Properties
    • Accessing More Properties
    • The ‘Enter’ Form
    • Form Setup
    • Entering the Lottery
    • Picking a Winner
    • Project Review
  4. Real Projects with Ethereum
    • Solving Real Problems with Contracts
    • Fixing Kickstarter’s Issues
    • Campaign Contract Design
    • Campaign Constructor
    • Contributing to the Campaign
    • A Quick Test
    • The Request Struct
    • More on Function Modifiers
    • Creating Struct Instances
    • Instance Creation Syntax
    • Storage and Memory
    • More on Storage vs Memory
    • Voting System Requirements
    • The Wrong Voting System
    • Issues with Arrays
    • Mappings vs Arrays
    • Basics of Mappings
    • Refactoring to Mappings
    • Refactoring Request Stucts
    • More on Struct Initialization
    • Approving a Request
    • Testing Request Approvals
    • Finalizing a Request
    • Last Remix Test
    • Thinking about Deployment
    • Solution to Deployment
    • Adding a Campaign Factory
    • Testing the Factory
  5. Ethereum Project Infrastructure
    • Project Setup
    • Directory Structure
    • A Better Compile Script
    • Single Run Compilation
    • More on Compile
    • Test File Setup
    • Creating Campaign Instances
    • Testing Warmup
    • Accessing Mappings
    • Requiring Minimum Contributinos
    • Array Getters
    • One End to End Test
    • Deployment
    • Refactoring Deployment
  6. Advanced Multi-Page Front-Ends
    • App Mockups
    • CRA vs Next
    • Next’s Pages Architecture
    • Basics of Next Routing
    • Root Routes
    • CampaignFactory Instance
    • Getting a Test Campaign
    • Fetching Deployed Campaigns
    • Why Next.js?
    • Server vs Client Web3 Instances
    • GetInitialProps Function
    • Semantic UI React
    • Card Group Setup
    • Rendering Card Groups
    • Adding CSS
    • Adding a Button
    • The Need for a Layout
    • The Layout Component
    • Assembling a Header
    • Constraining Content Width
    • Two Column Layout
    • Nested Routing
    • Final CSS Fix
    • Form Creation
    • Input Change Handlers
    • Form Submittal
    • Testing Submittal
    • Form Error Handling
    • Button Spinners
    • Routing Issues
    • Next Routes Setup
    • Automatic Navigation
    • Header Navigation
    • Routing to Campaigns
    • Restarting the Server
    • Route Mappings
    • Planning CampaignShow
    • Redeploying CampaignFactory
    • CampaignShow’s GetInitialProps
    • Accessing a Campaign
    • Summary Translation Layer
    • Custom Card Groups
    • One Card Per Property
    • The Contribute Form
    • Grid Layouts
    • Form State
    • Communicating the Campaign Address
    • Making a Contribution
    • Refreshing Contract Data
    • Spinners and Error Handlers
    • Listing Requests
    • Grids vs Columns
    • More Routing!
    • Request Creation Form
    • Creating a Request
    • Form Polish
    • Creating a Request
    • Requests One by One
    • Fancy Javascript
    • Small Typo!
    • Rendering a Table
    • Request Row Component
    • Request Row Content
    • Approvers Count Cell
    • Approving a Request
    • Finalizing Requests
    • Testing Finalization
    • Row Status Styling
    • Finishing Requests Index