diff --git a/eth/vm/forks/berlin/opcodes.py b/eth/vm/forks/berlin/opcodes.py new file mode 100644 index 0000000000..b850162217 --- /dev/null +++ b/eth/vm/forks/berlin/opcodes.py @@ -0,0 +1,36 @@ +import copy + +from eth_utils.toolz import merge + +from eth import constants +from eth.vm import ( + mnemonics, + opcode_values, +) +from eth.vm.opcode import as_opcode +from eth.vm.forks.istanbul.opcodes import ISTANBUL_OPCODES + + +UPDATED_OPCODES = { + opcode_values.BEGINSUB: as_opcode( + logic_fn = ..., + mnemonic = mnemonics.BEGINSUB, + gas_cost = constants.GAS_BASE, + ), + opcode_values.JUMPSUB: as_opcode( + logic_fn = ..., + mnemonic = mnemonics.JUMPSUB, + gas_cost = constants.GAS_MID, + ), + opcode_values.ENDSUB: as_opcode( + logic_fn = ..., + mnemonic = mnemonics.ENDSUB, + gas_cost = constants.GAS_VERYLOW, + ), +} + + +BERLIN_OPCODES = merge( + copy.deepcopy(ISTANBUL_OPCODES), + UPDATED_OPCODES, +) \ No newline at end of file diff --git a/eth/vm/mnemonics.py b/eth/vm/mnemonics.py index 4d83de24a1..a7cf15604d 100644 --- a/eth/vm/mnemonics.py +++ b/eth/vm/mnemonics.py @@ -162,6 +162,12 @@ LOG3 = 'LOG3' LOG4 = 'LOG4' # +# Subroutines +# +BEGINSUB = 'BEGINSUB' +JUMPSUB = 'JUMPSUB' +ENDSUB = 'ENDSUB' +# # System # CREATE = 'CREATE' diff --git a/eth/vm/opcode_values.py b/eth/vm/opcode_values.py index 2845e7d4d7..060ebceddc 100644 --- a/eth/vm/opcode_values.py +++ b/eth/vm/opcode_values.py @@ -182,6 +182,14 @@ LOG4 = 0xa4 +# +# Subroutines +# +BEGINSUB = 0xb2 +JUMPSUB = 0xb3 +ENDSUB = 0xb7 + + # # System #