Prerequisites: Smart Contract Development for Ethereum

This course is targeting programmers who already have solid experience in an object-oriented programming language. In particular this means you should know:

Imperative Programming

  • the usual control-flow primitives such as if conditions, for and while loops functions and recursion
  • common data types such as integers (signed and unsigned), booleans, strings, etc.
  • custom types such as (c-style) structs and enums
  • commonly used data structures, at the very least with Trees, Arrays and Maps (HashTables)

Object-oriented Programming

  • the fundamentals of object-oriented programming such as classes and related concepts (e.g. constructors, member variables and functions).
  • Inheritance (including concepts like abstract classes, interfaces, etc.)
  • You don’t need to be an expert on design patterns but it doesn’t hurt do have an idea what a Factory is.

Other Prerequisites

  • how to use a unix-style shell (e.g. bash). You don’t need to be able to write any scripts but you should know the basics (command execution, cd, mkdir, etc.)

In addition, it is good to know the following things. While the necessary basics are briefly covered in the course it will make the course a lot easier to follow if you already have some prior knowledge in:


  • You should have some basic idea about how a blockchain works
  • You should have some basic idea what a smart contract is
  • You should have some basic familiarity with terms like hash functions and signatures


  • We will use a lot of Javascript in the Truffle console and in testing
  • In particular we will use a lot of ES6 and later syntax (such as arrow functions, object spread operator, async / await syntax)
  • Most of the interaction with Ethereum is async. Having worked with Promises before can very helpful
  • Some prior experience with node.js, npm and mocha is useful


  • You should know what unit-testing is
  • You should have experience with at least one unit testing framework (does not matter which language)


  • The introduction assumes that you know what http, rpc, ipc are, however it is not relevant for most of the course