Skip to content

Commit

Permalink
new(tests): add basic EOF execution tests
Browse files Browse the repository at this point in the history
Migrated from ethereum/tests:
EIPTests/StateTests/stEOF/stEIP3540/EOF1_Execution.json
  • Loading branch information
chfast committed Oct 24, 2024
1 parent 46ebf43 commit 6ffe206
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 1 deletion.
2 changes: 2 additions & 0 deletions converted-ethereum-tests.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ EOFTests/efValidation/unreachable_code_sections_.json
EOFTests/efValidation/EOF1_returncontract_invalid_.json
EOFTests/efValidation/EOF1_returncontract_valid_.json

EIPTests/StateTests/stEOF/stEIP3540/EOF1_Execution.json

([#440](https://github.com/ethereum/execution-spec-tests/pull/440))
GeneralStateTests/Cancun/stEIP1153-transientStorage/01_tloadBeginningTxn.json
GeneralStateTests/Cancun/stEIP1153-transientStorage/02_tloadAfterTstore.json
Expand Down
78 changes: 78 additions & 0 deletions tests/osaka/eip7692_eof_v1/eip3540_eof_v1/test_execution.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
"""
Execution of basic EOF containers.
"""

import pytest

from ethereum_test_base_types import Storage
from ethereum_test_tools import Account, Alloc, Environment, StateTestFiller, Transaction
from ethereum_test_tools.eof.v1 import Container, Section
from ethereum_test_tools.vm.opcode import Opcodes as Op

from .. import EOF_FORK_NAME

REFERENCE_SPEC_GIT_PATH = "EIPS/eip-3540.md"
REFERENCE_SPEC_VERSION = "8dcb0a8c1c0102c87224308028632cc986a61183"

pytestmark = pytest.mark.valid_from(EOF_FORK_NAME)

EXPECTED_STORAGE = (bytes.fromhex("EF"), bytes.fromhex("BADDCAFE"))
"""Expected storage (key => value) to be produced by the EOF containers"""


@pytest.mark.parametrize(
"container",
(
Container(
name="store_from_push",
sections=[Section.Code(Op.SSTORE(*EXPECTED_STORAGE) + Op.STOP)],
),
Container(
name="store_with_data",
sections=[
Section.Code(Op.SSTORE(Op.DATALOADN[0], Op.DATALOADN[32]) + Op.STOP),
Section.Data(
EXPECTED_STORAGE[0].rjust(32, b"\x00") + EXPECTED_STORAGE[1].rjust(32, b"\x00")
),
],
),
),
ids=lambda x: x.name,
)
def test_eof_execution(
state_test: StateTestFiller,
pre: Alloc,
container: Container,
):
"""
Test simple contracts that are expected to succeed on call.
"""
env = Environment()

storage = Storage()
sender = pre.fund_eoa()
container_address = pre.deploy_contract(container)
caller_contract = Op.SSTORE(
storage.store_next(1), Op.CALL(Op.GAS, container_address, 0, 0, 0, 0, 0)
)
caller_address = pre.deploy_contract(caller_contract)

tx = Transaction(
to=caller_address,
gas_limit=1_000_000,
gas_price=10,
protected=False,
sender=sender,
)

post = {
caller_address: Account(storage=storage),
container_address: Account(storage=dict([EXPECTED_STORAGE])),
}

state_test(
env=env,
pre=pre,
post=post,
tx=tx,
)
2 changes: 1 addition & 1 deletion tests/osaka/eip7692_eof_v1/eof_tracker.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@

### Execution

- [ ] Execution of EOF contracts (ethereum/tests: src/EIPTestsFiller/StateTests/stEOF/stEIP3540/EOF1_ExecutionFiller.yml)
- [x] Execution of EOF contracts ([`tests/osaka/eip7692_eof_v1/eip3540_eof_v1/test_execution.py::test_eof_execution`](./eip3540_eof_v1/test_execution/test_eof_execution.md))
- [x] Legacy executing EXTCODESIZE of EOF contract ([`tests/osaka/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py::test_legacy_calls_eof_sstore`](./eip3540_eof_v1/test_extcode/test_legacy_calls_eof_sstore.md))
- [x] Legacy executing EXTCODEHASH of EOF contract ([`tests/osaka/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py::test_legacy_calls_eof_sstore`](./eip3540_eof_v1/test_extcode/test_legacy_calls_eof_sstore.md))
- [x] Legacy executing EXTCODECOPY of EOF contract ([`tests/osaka/eip7692_eof_v1/eip3540_eof_v1/test_extcode.py::test_legacy_calls_eof_sstore`](./eip3540_eof_v1/test_extcode/test_legacy_calls_eof_sstore.md))
Expand Down

0 comments on commit 6ffe206

Please sign in to comment.