This EIP defines EOF support for EVM64 with its additional code validation rules and RJUMPI, RJUMPV opcodes.
Motivation
EOF defines a stricter stricter code validation rule to improve efficiency. Due to EVM64 using multibyte opcode (the mode opcode C0), a small adaptation is needed. This EIP also additionally defines a 64-bit mode RJUMPI and RJUMPV to be 64-bit.
Specification
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119 and RFC 8174.
We define the following gas cost constant:
Name
Gas
G_RJUMPIV64
3
At EOF contract creation time as defined in EIP-3670, if the opcode C0 is encountered and it is not part of PUSH opcode’s data, then the interpreter MUST validate that:
The next opcode exists.
The next opcode is RJUMPI64, RJUMPV64, or one of the core 64-bit opcode defined in EIP-7937 minus JUMP64 and JUMPI64.
For flow operations RJUMPI and RJUMPV, the 64-bit mode has following changes:
For RJUMPI64 (0xc0e1), the condition popped from stack is only read for the last 64 bits. Gas cost is G_RJUMPIV64.
For RJUMPV64 (0xc0e2), the case popped from stack is only read for the last 64 bits. Gas cost is G_RJUMPIV64.
Note that:
RJUMP is automatically in 64-bit mode because it does not read or write the stack.
Rationale
For detailed rationale discussion, please see the core EVM64 definition EIP-7937.