Skip to content
- 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
- 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
- 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
- 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
- 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
- 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