This is a course for hackers, programmers, and software engineers who learn by doing!

By the end, you’ll have an EVM implementation that can run real smart-contract bytecode, including simple contracts compiled from Solidity. Along the way, you’ll learn how EVM works, from simple stack operations to code deployment and proxy contracts.

When I built EVM from scratch for the first time, I was blown away at how simple and elegant it was. Now I hope to share my excitement with you!

The goal of this course is to be addictive. Working on the unit tests should feel like a game, solving one puzzle at a time.

Getting Started

Estimated time: 15-60 minutes

<aside> 💡 Students who complete all 5 steps in their first day have a much higher chance to finish the full course

</aside>

Step 1: Clone GitHub repo

The repo contains templates for the test cases we’ll be working through, plus templates for the most popular programming languages:

git clone <https://github.com/w1nt3r-eth/evm-from-scratch>

Then download evm-pro.json from Gumroad and place it into the root of that folder.

Step 2: Choose the programming language

You can implement EVM in any programming language. I highly recommend using the programming language you already know. A word of caution about Rust: many students from the previous cohorts decided to learn both EVM and Rust at the same time but ended up getting stuck a lot.

The repo already has templates for JavaScript, TypeScript, Python, Go, Rust and many others. You are welcome to use them, or create your own.

Step 3: Run the tests