diff --git a/.github/actions/build-evm-client/evmone/action.yaml b/.github/actions/build-evm-client/evmone/action.yaml index 17ed0cb398..b7e0989bd3 100644 --- a/.github/actions/build-evm-client/evmone/action.yaml +++ b/.github/actions/build-evm-client/evmone/action.yaml @@ -9,6 +9,10 @@ inputs: description: 'Reference to branch, commit, or tag to use to build the EVM binary' required: true default: 'master' + targets: + description: 'Which targets to build from evmone repo' + required: false + default: 'all' runs: using: "composite" steps: @@ -27,5 +31,5 @@ runs: mkdir -p $GITHUB_WORKSPACE/bin cd $GITHUB_WORKSPACE/evmone cmake -S . -B build -DEVMONE_TESTING=ON - cmake --build build --parallel - echo $GITHUB_WORKSPACE/evmone/build/bin/ >> $GITHUB_PATH \ No newline at end of file + cmake --build build --parallel --target ${{ inputs.targets }} + echo $GITHUB_WORKSPACE/evmone/build/bin/ >> $GITHUB_PATH diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index 555058c39e..9134edae96 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -20,6 +20,9 @@ jobs: echo "Git reference: ${{ github.ref }}" echo "Git head ref: ${{ github.head_ref }}" echo "Git base ref: ${{ github.base_ref }}" + echo "Node Version: $(node -v)" + echo "NPM Version: $(npm -v)" + - name: Get all changed python files in tests/ and changes to coverted-ethereum-tests.txt id: changed-tests @@ -89,6 +92,7 @@ jobs: id: evm-builder2 with: type: "main" + targets: "evmone-t8n" - name: Checkout ethereum/tests uses: actions/checkout@v4 @@ -175,7 +179,9 @@ jobs: mkdir -p fixtures/state_tests mkdir -p fixtures/eof_tests - uv run fill $files -n auto --until=Cancun --evm-bin evmone-t8n || true >> filloutput.log 2>&1 + echo "uv run fill $files --until=Cancun --evm-bin evmone-t8n >> filloutput.log 2>&1" + uv run fill $files --until=Cancun --evm-bin evmone-t8n >> filloutput.log 2>&1 + cat filloutput.log if grep -q "FAILURES" filloutput.log; then echo "Error: failed to generate .py tests." @@ -229,7 +235,9 @@ jobs: mkdir -p fixtures/eof_tests if [ -n "$files_fixed" ]; then - uv run fill $files_fixed -n auto --until=Cancun --evm-bin evmone-t8n || true >> filloutput.log 2>&1 + echo "uv run fill $files_fixed --until=Cancun --evm-bin evmone-t8n >> filloutput.log 2>&1" + uv run fill $files_fixed --until=Cancun --evm-bin evmone-t8n >> filloutput.log 2>&1 + cat filloutput.log if grep -q "FAILURES" filloutput.log; then echo "Error: failed to generate .py tests from before the PR." @@ -240,21 +248,23 @@ jobs: echo "Error: failed to generate .py tests from before the PR." exit 1 fi - - filesState=$(find fixtures/state_tests -type f -name "*.json") - filesEOF=$(find fixtures/eof_tests -type f -name "*.json") - - BASE_TEST_PATH=${{ github.workspace }}/evmtest_coverage/coverage/BASE_TESTS - mkdir -p $BASE_TEST_PATH - find fixtures/state_tests -type f -name "*.json" -exec cp {} $BASE_TEST_PATH \; - find fixtures/eof_tests -type f -name "*.json" -exec cp {} $BASE_TEST_PATH \; - for file in $BASE_TEST_PATH/*.json; do - if [ -e "$file" ]; then - mv "$file" "${file%.json}_$PREV_COMMIT.json" - fi - done + else + echo "No tests affected from before patch!" fi + filesState=$(find fixtures/state_tests -type f -name "*.json") + filesEOF=$(find fixtures/eof_tests -type f -name "*.json") + + BASE_TEST_PATH=${{ github.workspace }}/evmtest_coverage/coverage/BASE_TESTS + mkdir -p $BASE_TEST_PATH + find fixtures/state_tests -type f -name "*.json" -exec cp {} $BASE_TEST_PATH \; + find fixtures/eof_tests -type f -name "*.json" -exec cp {} $BASE_TEST_PATH \; + for file in $BASE_TEST_PATH/*.json; do + if [ -e "$file" ]; then + mv "$file" "${file%.json}_$PREV_COMMIT.json" + fi + done + - name: Print tests that will be covered if: ${{ steps.changed-tests.outputs.tests_any_changed == 'true' }} run: | diff --git a/tests/frontier/opcodes/test_dup.py b/tests/frontier/opcodes/test_dup.py index 184b38caa2..435eca7ef5 100644 --- a/tests/frontier/opcodes/test_dup.py +++ b/tests/frontier/opcodes/test_dup.py @@ -1,4 +1,5 @@ """ +touch abstract: Test DUP Test the DUP opcodes. diff --git a/tests/frontier/opcodes/test_newl.py b/tests/frontier/opcodes/test_newl.py new file mode 100644 index 0000000000..586d831d0e --- /dev/null +++ b/tests/frontier/opcodes/test_newl.py @@ -0,0 +1,105 @@ +""" +abstract: Test DUP + Test the DUP opcodes. + +""" + +import pytest + +from ethereum_test_forks import Frontier, Homestead +from ethereum_test_tools import Account, Alloc, Environment +from ethereum_test_tools import Opcodes as Op +from ethereum_test_tools import StateTestFiller, Storage, Transaction + + +@pytest.mark.parametrize( + "dup_opcode", + [ + Op.DUP1, + Op.DUP2, + Op.DUP3, + Op.DUP4, + Op.DUP5, + Op.DUP6, + Op.DUP7, + Op.DUP8, + Op.DUP9, + Op.DUP10, + Op.DUP11, + Op.DUP12, + Op.DUP13, + Op.DUP14, + Op.DUP15, + Op.DUP16, + ], + ids=lambda op: str(op), +) +@pytest.mark.with_all_evm_code_types +def test_newl( + state_test: StateTestFiller, + fork: str, + dup_opcode: Op, + pre: Alloc, +): + """ + Test the DUP1-DUP16 opcodes. + + Note: Test case ported from [ethereum/tests](https://github.com/ethereum/tests) + Test ported from [ethereum/tests/GeneralStateTests/VMTests/vmTests/dup.json](https://github.com/ethereum/tests/blob/develop/GeneralStateTests/VMTests/vmTests/dup.json) by Ori Pomerantz. + """ # noqa: E501 + env = Environment() + sender = pre.fund_eoa() + post = {} + + # Push 0x00 - 0x10 onto the stack + account_code = sum(Op.PUSH1(i) for i in range(0x11)) + + # Use the DUP opcode + account_code += dup_opcode + + # Save each stack value into different keys in storage + account_code += sum(Op.PUSH1(i) + Op.SSTORE for i in range(0x11)) + + account = pre.deploy_contract(account_code) + + tx = Transaction( + ty=0x0, + nonce=0, + to=account, + gas_limit=500000, + gas_price=10, + protected=False if fork in [Frontier, Homestead] else True, + data="", + sender=sender, + ) + + """ + Storage will be structured as follows: + + 0x00: 0x10-0x01 (Depending on DUP opcode) + 0x01: 0x10 + 0x02: 0x0F + 0x03: 0x0E + 0x04: 0x0D + 0x05: 0x0C + 0x06: 0x0B + 0x07: 0x0A + 0x08: 0x09 + 0x09: 0x08 + 0x0A: 0x07 + 0x0B: 0x06 + 0x0C: 0x05 + 0x0D: 0x04 + 0x0E: 0x03 + 0x0F: 0x02 + 0x10: 0x01 + + DUP1 copies the first element of the stack (0x10). + DUP16 copies the 16th element of the stack (0x01). + """ + s: Storage.StorageDictType = dict(zip(range(1, 17), range(16, 0, -1))) + s[0] = 16 - (dup_opcode.int() - 0x80) + + post[account] = Account(storage=s) + + state_test(env=env, pre=pre, post=post, tx=tx)