core/vm: EIP-2315, JUMPSUB for the EVM (#20619)
* core/vm: implement EIP 2315, subroutines for the EVM * core/vm: eip 2315 - lintfix + check jump dest validity + check ret stack size constraints logger: markdown-friendly traces, validate jumpdest, more testcase, correct opcodes * core/vm: update subroutines acc to eip: disallow walk-into * core/vm/eips: gas cost changes for subroutines * core/vm: update opcodes for EIP-2315 * core/vm: define RETURNSUB as a 'jumping' operation + review concerns Co-authored-by: Martin Holst Swende <martin@swende.se>
This commit is contained in:
@ -107,18 +107,21 @@ const (
|
||||
|
||||
// 0x50 range - 'storage' and execution.
|
||||
const (
|
||||
POP OpCode = 0x50 + iota
|
||||
MLOAD
|
||||
MSTORE
|
||||
MSTORE8
|
||||
SLOAD
|
||||
SSTORE
|
||||
JUMP
|
||||
JUMPI
|
||||
PC
|
||||
MSIZE
|
||||
GAS
|
||||
JUMPDEST
|
||||
POP OpCode = 0x50
|
||||
MLOAD OpCode = 0x51
|
||||
MSTORE OpCode = 0x52
|
||||
MSTORE8 OpCode = 0x53
|
||||
SLOAD OpCode = 0x54
|
||||
SSTORE OpCode = 0x55
|
||||
JUMP OpCode = 0x56
|
||||
JUMPI OpCode = 0x57
|
||||
PC OpCode = 0x58
|
||||
MSIZE OpCode = 0x59
|
||||
GAS OpCode = 0x5a
|
||||
JUMPDEST OpCode = 0x5b
|
||||
BEGINSUB OpCode = 0x5c
|
||||
RETURNSUB OpCode = 0x5d
|
||||
JUMPSUB OpCode = 0x5e
|
||||
)
|
||||
|
||||
// 0x60 range.
|
||||
@ -297,6 +300,10 @@ var opCodeToString = map[OpCode]string{
|
||||
GAS: "GAS",
|
||||
JUMPDEST: "JUMPDEST",
|
||||
|
||||
BEGINSUB: "BEGINSUB",
|
||||
JUMPSUB: "JUMPSUB",
|
||||
RETURNSUB: "RETURNSUB",
|
||||
|
||||
// 0x60 range - push.
|
||||
PUSH1: "PUSH1",
|
||||
PUSH2: "PUSH2",
|
||||
@ -461,6 +468,9 @@ var stringToOp = map[string]OpCode{
|
||||
"MSIZE": MSIZE,
|
||||
"GAS": GAS,
|
||||
"JUMPDEST": JUMPDEST,
|
||||
"BEGINSUB": BEGINSUB,
|
||||
"RETURNSUB": RETURNSUB,
|
||||
"JUMPSUB": JUMPSUB,
|
||||
"PUSH1": PUSH1,
|
||||
"PUSH2": PUSH2,
|
||||
"PUSH3": PUSH3,
|
||||
|
Reference in New Issue
Block a user