Skip to main content


The course you are about to begin is designed to rapidly and thoroughly teach web3 concepts and language to web2 developers. It specifically highlights similarities and differences found in web3 vs. web2 and contains background information, guided coding practices, and independent exercises.

This program is not suitable for people who are new to programming in general. While the explanations are thorough, they often rely on an expectation that you are familiar with the underlying concepts. We will not teach you what arrays are and how they are used, but we will show you how they work in this environment.


Before these lessons, you should:

  • Have several years of experience as a programmer in an object-oriented language
  • Be familiar with the uses and properties of the Ethereum blockchain and the EVM
  • Ideally, be familiar with at least one curly-bracket programming language


By the end of this module, you should be able to:

  • Introduction to Solidity
    • Describe why languages like Solidity are used to write smart contracts
    • Relate an overview of the history (and pace of change) of Solidity and its strengths and weaknesses
    • Deploy and test the Storage.sol demo contract in Remix
  • Contracts and Basic Functions
    • Construct a simple ""Hello World"" contract
    • Categorize basic data types
    • List the major differences between data types in Solidity as compared to other languages
    • Compare and contrast signed and unsigned integers
    • Write a pure function that accepts argument and returns a value
  • Deploying Smart Contracts to a Testnet
    • Describe the uses and properties of the Ethereum testnet
    • Compare and contrast Ropsten, Rinkeby, and Goerli
    • Deploy a contract to the Goerli testnet and interact with it in Etherscan
  • Control Structures
    • Control code flow with if, else, while, and for
    • List the unique constraints for control flow in Solidity
  • Storage in Solidity
    • Diagram how a contract's data is stored on the blockchain (Contract -> Blockchain)
    • Order variable declarations to use storage efficiently
    • Diagram how variables in a contract are stored (Variable -> Contract)
  • Arrays in Solidity
    • Construct then store and retrieve values in storage and memory arrays
    • Describe the difference between storage and memory arrays
    • Diagram how arrays are stored
    • Write a function that can return a filtered subset of an array
  • The Mapping Type
    • Construct a Map (dictionary) data type
    • Diagram the storage of the Mapping data type
    • Recall that assignment of the Map data type is not as flexible as for other data types/in other languages
    • Restrict function calls with the msg.sender global variable
    • Recall that there is no collision protection in the EVM and why this (probably) ok
  • Advanced Functions
    • Describe how pure and view functions are different than functions that modify storage
    • Categorize functions as public, private, internal, or external based on their usage
    • Use modifiers to efficiently add functionality to multiple functions
    • Utilize require to write a function that can only be used when a variable is set to 'True'
  • Structs
    • Construct a struct (user-defined type) that contains several different data types
    • Declare members of the struct to maximize storage efficiency
    • Describe constraints related to assignment of structs depending on the types they contain
  • Inheritance
    • Write a smart contract that inherits from another contract
  • Imports
    • Import and use code from another file
  • Errors
    • Debug common solidity errors including execution reverted, out of gas, stack overflow, value overflow/underflow, index out of range, and so on
  • New Keyword
    • Write a contract that creates a new contract with the new keyword