### 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}]"}
    1008 views