Skip to content

test_all_invalid_terminating_opcodes()

Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py::test_all_invalid_terminating_opcodes@verkle@v0.0.6.

Generate fixtures for these test cases for Pragueeip7692 with:

Pragueeip7692 only:

fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py::test_all_invalid_terminating_opcodes --fork=PragueEIP7692 --evm-bin=/path/to/evm-tool-dev-version

For all forks up to and including Pragueeip7692:

fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py::test_all_invalid_terminating_opcodes --until=PragueEIP7692

Test all opcodes that are invalid as the last opcode in a container

Source code in tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_all_opcodes_in_container.py
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
@pytest.mark.parametrize(
    "opcode",
    sorted(
        valid_eof_opcodes
        - halting_opcodes
        - section_terminating_opcodes
        - {Op.RJUMP, Op.RJUMPI, Op.RJUMPV}
    ),
)
def test_all_invalid_terminating_opcodes(
    eof_test: EOFTestFiller,
    opcode: Opcode,
):
    """
    Test all opcodes that are invalid as the last opcode in a container
    """
    if opcode.has_data_portion():
        # Add the appropriate data portion to the opcode by using the get_item method.
        # On the CALLF opcode we need to reference the second code section, hence the [1] index.
        opcode = opcode[0] if opcode != Op.CALLF else opcode[1]

    bytecode = (Op.PUSH0 * opcode.min_stack_height) + opcode

    sections = [Section.Code(code=bytecode)]

    if opcode == Op.CALLF[1]:
        sections += [Section.Code(code=Op.RETF, code_outputs=0)]
    elif opcode == Op.EOFCREATE[0]:
        sections += [
            Section.Container(
                container=Container(
                    sections=[
                        Section.Code(code=Op.RETURNCONTRACT[0](0, 0)),
                        Section.Container(Container.Code(code=Op.STOP)),
                    ]
                )
            )
        ]

    sections += [Section.Data(b"\0" * 32)]

    eof_test(
        data=Container(
            sections=sections,
        ),
        expect_exception=EOFException.MISSING_STOP_OPCODE,
    )

Parametrized Test Cases

The interactive table below is also available as a standalone page.

Skipped Parameters

For more concise readability, the table below does not list the following parameter values: fork, blockchain_test, state_test, state_test_only, eof_test, eof_state_test.

Test ID opcode
opcode_ADD ADD
opcode_MUL MUL
opcode_SUB SUB
opcode_DIV DIV
opcode_SDIV SDIV
opcode_MOD MOD
opcode_SMOD SMOD
opcode_ADDMOD ADDMOD
opcode_MULMOD MULMOD
opcode_EXP EXP
opcode_SIGNEXTEND SIGNEXTEND
opcode_LT LT
opcode_GT GT
opcode_SLT SLT
opcode_SGT SGT
opcode_EQ EQ
opcode_ISZERO ISZERO
opcode_AND AND
opcode_OR OR
opcode_XOR XOR
opcode_NOT NOT
opcode_BYTE BYTE
opcode_SHL SHL
opcode_SHR SHR
opcode_SAR SAR
opcode_SHA3 SHA3
opcode_ADDRESS ADDRESS
opcode_BALANCE BALANCE
opcode_ORIGIN ORIGIN
opcode_CALLER CALLER
opcode_CALLVALUE CALLVALUE
opcode_CALLDATALOAD CALLDATALOAD
opcode_CALLDATASIZE CALLDATASIZE
opcode_CALLDATACOPY CALLDATACOPY
opcode_GASPRICE GASPRICE
opcode_RETURNDATASIZE RETURNDATASIZE
opcode_RETURNDATACOPY RETURNDATACOPY
opcode_BLOCKHASH BLOCKHASH
opcode_COINBASE COINBASE
opcode_TIMESTAMP TIMESTAMP
opcode_NUMBER NUMBER
opcode_PREVRANDAO PREVRANDAO
opcode_GASLIMIT GASLIMIT
opcode_CHAINID CHAINID
opcode_SELFBALANCE SELFBALANCE
opcode_BASEFEE BASEFEE
opcode_BLOBHASH BLOBHASH
opcode_BLOBBASEFEE BLOBBASEFEE
opcode_POP POP
opcode_MLOAD MLOAD
opcode_MSTORE MSTORE
opcode_MSTORE8 MSTORE8
opcode_SLOAD SLOAD
opcode_SSTORE SSTORE
opcode_MSIZE MSIZE
opcode_JUMPDEST JUMPDEST
opcode_TLOAD TLOAD
opcode_TSTORE TSTORE
opcode_MCOPY MCOPY
opcode_PUSH0 PUSH0
opcode_PUSH1 PUSH1
opcode_PUSH2 PUSH2
opcode_PUSH3 PUSH3
opcode_PUSH4 PUSH4
opcode_PUSH5 PUSH5
opcode_PUSH6 PUSH6
opcode_PUSH7 PUSH7
opcode_PUSH8 PUSH8
opcode_PUSH9 PUSH9
opcode_PUSH10 PUSH10
opcode_PUSH11 PUSH11
opcode_PUSH12 PUSH12
opcode_PUSH13 PUSH13
opcode_PUSH14 PUSH14
opcode_PUSH15 PUSH15
opcode_PUSH16 PUSH16
opcode_PUSH17 PUSH17
opcode_PUSH18 PUSH18
opcode_PUSH19 PUSH19
opcode_PUSH20 PUSH20
opcode_PUSH21 PUSH21
opcode_PUSH22 PUSH22
opcode_PUSH23 PUSH23
opcode_PUSH24 PUSH24
opcode_PUSH25 PUSH25
opcode_PUSH26 PUSH26
opcode_PUSH27 PUSH27
opcode_PUSH28 PUSH28
opcode_PUSH29 PUSH29
opcode_PUSH30 PUSH30
opcode_PUSH31 PUSH31
opcode_PUSH32 PUSH32
opcode_DUP1 DUP1
opcode_DUP2 DUP2
opcode_DUP3 DUP3
opcode_DUP4 DUP4
opcode_DUP5 DUP5
opcode_DUP6 DUP6
opcode_DUP7 DUP7
opcode_DUP8 DUP8
opcode_DUP9 DUP9
opcode_DUP10 DUP10
opcode_DUP11 DUP11
opcode_DUP12 DUP12
opcode_DUP13 DUP13
opcode_DUP14 DUP14
opcode_DUP15 DUP15
opcode_DUP16 DUP16
opcode_SWAP1 SWAP1
opcode_SWAP2 SWAP2
opcode_SWAP3 SWAP3
opcode_SWAP4 SWAP4
opcode_SWAP5 SWAP5
opcode_SWAP6 SWAP6
opcode_SWAP7 SWAP7
opcode_SWAP8 SWAP8
opcode_SWAP9 SWAP9
opcode_SWAP10 SWAP10
opcode_SWAP11 SWAP11
opcode_SWAP12 SWAP12
opcode_SWAP13 SWAP13
opcode_SWAP14 SWAP14
opcode_SWAP15 SWAP15
opcode_SWAP16 SWAP16
opcode_LOG0 LOG0
opcode_LOG1 LOG1
opcode_LOG2 LOG2
opcode_LOG3 LOG3
opcode_LOG4 LOG4
opcode_DATALOAD DATALOAD
opcode_DATALOADN DATALOADN
opcode_DATASIZE DATASIZE
opcode_DATACOPY DATACOPY
opcode_CALLF CALLF
opcode_DUPN DUPN
opcode_SWAPN SWAPN
opcode_EXCHANGE EXCHANGE
opcode_EOFCREATE EOFCREATE
opcode_RETURNDATALOAD RETURNDATALOAD
opcode_EXTCALL EXTCALL
opcode_EXTDELEGATECALL EXTDELEGATECALL
opcode_EXTSTATICCALL EXTSTATICCALL