### 7 things you didn't know about the EVM
Or maybe you did.
---
### 1. *EthereumScript*
- It was inspired by Bitcoin Script and underwent several iterations before the Frontier release in 2015.
- Simple stack machine.
- 256-bit stack items due to operating on signatures.
---
### 1. *EthereumScript*
![](https://i.imgur.com/eXvtmWq.png)
---
### 1. *EthereumScript*
![](https://i.imgur.com/pAislHg.png)
---
### 2. Precompiles
- Did not exist initially.
- They were created to reduce the complexity of the EVM. (Didn't work out well...)
- `keccak256` stayed because it was deemed too frequently used.
---
### 3. Gas prices
- Initial prices set via [pyethereum](https://github.com/ethereum/pyethereum) benchmarks on Vitalik's laptop.
- They underwent frequent readjustments.
---
### 4. `invalid`
- The `invalid` opcode was added in Byzantium (2017)
- The canonical way to abort was jumping to invalid destination.
---
## 5. Early? Late? additions
- Revert
- Added in Byzantium (2017)
- Shifts
- Added in Constantinople (2019!)
- Before that you had to do `mul(a, exp(2, n))` for shifts.
---
### 6. Specifications
- [Yellowpaper](https://ethereum.github.io/yellowpaper/)
- [Jellopaper](https://jellopaper.org/)
- [execution-specs](https://github.com/ethereum/execution-specs)
- [EIPs](https://github.com/ethereum/EIPs)
---
### 7. Implementations
- clients (geth, nethermind, besu, erigon)
- ethereumjs (in browser, incl. metamask)
- evmone (in silkworm)
- revm (in foundry)
- evmos (uses geth)
- aurora (rust @ near)
- neon (rust @ solana)
- evmjit
- pse/scroll zkevm
- polygon/hermez zkevm
- hevm
- kevm
---
### Questions
{"metaMigratedAt":"2023-06-17T14:02:07.728Z","metaMigratedFrom":"YAML","title":"7 things you didn't know about the EVM","breaks":true,"description":"View the slide with \"Slide Mode\".","slideOptions":"{\"theme\":\"solarized\",\"transition\":\"fade\"}","contributors":"[{\"id\":\"cceb61b3-b922-415e-8d54-8db69c3b9699\",\"add\":8708,\"del\":6861}]"}