# The Ethereum Virtual Machine

> The concept of an arbitrary state transition function as implemented by the Ethereum protocol provides for a platform with unique potential; rather than being a closed-ended, single-purpose protocol intended for a specific array of applications in data storage, gambling or finance, Ethereum is open-ended by design, and we believe that it is extremely well-suited to serving as a foundational layer for a very large number of both financial and non-financial protocols in the years to come\
> \
> \- Vitalik Buterin, *The Ethereum Whitepaper*

At this point of the course, you have become very familiar with the Solidity syntax and are able quite complex smart contracts. While it might appear that there is little left to teach regarding Solidity, the opposite is true; we have learned most of what smart contracts are capable of from a high level, but there is an entire world that we have yet to explore.&#x20;

Therefore, it is appropriate that we cover the machine that runs your smart contract code: the **Ethereum Virtual Machine (EVM)**. Understanding the EVM serves as a foundation for understanding the security and gas optimization practices that *advanced* smart contract development requires. Furthermore, learning about the EVM will allow us to introduce **Yul**, a low-level programming language used within Solidity that allows for low-level programming (in contrast to Solidity's high-level programming).

It is important to note that the EVM is an *architecture*. There does not exist an EVM; rather, there exists multiple implementations of the EVM (i.e. execution clients) which implement the necessary functionality for the client to compute data from the blockchain. Outside of this though, each execution client has the freedom to implement their version of the EVM as they wish (an obvious example of this is the language which an execution client is written in).

Learning about the EVM may seem scary at first; for many, this will be the first time learning about how a computer works (albeit, a *very simple computer*). Therefore, we will begin our journey of learning the EVM by first examining an elementary computer before discussing the **Turing Machine**, the most basic type of computer in which all computers can be reduced to. Afterwards, we will introduce the EVM by discussing the operations the EVM is capable of performing and later introducing the other components that define the EVM.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://cs4998.cornellblockchain.org/understanding-the-evm/the-ethereum-virtual-machine.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
