EVM Puzzle 6 solution
This is Part 6 of the “Let’s play EVM Puzzles” series, where I will explain how to solve each puzzle challenge.
EVM Puzzles is a project developed by Franco Victorio (@fvictorio_nan) that is a perfect fit if you are in the process of learning how the Ethereum EVM works, and you want to apply some of the knowledge you have just acquired.
EVM Puzzle 6
00 6000 PUSH1 00
02 35 CALLDATALOAD
03 56 JUMP
04 FD REVERT
05 FD REVERT
06 FD REVERT
07 FD REVERT
08 FD REVERT
09 FD REVERT
0A 5B JUMPDEST
0B 00 STOP
This challenge introduces the usage of a new opcode called CALLDATALOAD.
CALLDATALOAD opcode pop a value from the stack and use it as the byte
offset to read from the
CALLDATA. The result of the read from the calldata is pushed to the stack as a 32-byte value. Remember that
All bytes after the end of the calldata are set to 0.
Let’s make an example. Our calldata is
0x3039 (hex conversion of 12345 in decimal). If before calldata we have
PUSH1 00 it means that
CALLDATALOAD will load the whole calldata value with an offset of
The result would be that in stack position 0 we will have
3039000000000000000000000000000000000000000000000000000000000000. Do you see all the zeroes? That’s because after the end of the calldata, the EVM will fill the stack 32-byte value with zeroes.
If we had `PUSH1 01` before
CALLDATALOAD we would have in the stack
To solve this challenge, we need to make the EVM to jump to the instruction with
PC (program counter) position
Given that we push as
CALLDATA byte offset index a value of
0 we need to have inside the calldata a value that will let us jump to position
In this case, the solution will be to pass as
calldatavalue the value 0x000000000000000000000000000000000000000000000000000000000000000A.
Here’s the link to the solution of Puzzle 6 on EVM Codes website to simulate it.