Skip to content

test_address_collision()

Documentation for tests/osaka/eip7692_eof_v1/eip7873_tx_create/test_txcreate.py::test_address_collision@v4.4.0.

Generate fixtures for these test cases for Osaka with:

fill -v tests/osaka/eip7692_eof_v1/eip7873_tx_create/test_txcreate.py::test_address_collision --fork Osaka

Tests address collision.

Source code in tests/osaka/eip7692_eof_v1/eip7873_tx_create/test_txcreate.py
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
@pytest.mark.with_all_evm_code_types
def test_address_collision(
    state_test: StateTestFiller,
    pre: Alloc,
):
    """Tests address collision."""
    env = Environment()

    slot_create_address_2 = slot_last_slot * 2 + slot_create_address
    slot_create_address_3 = slot_last_slot * 3 + slot_create_address
    sender = pre.fund_eoa()
    initcode_hash = smallest_initcode_subcontainer.hash
    contract_address = pre.deploy_contract(
        code=Op.SSTORE(slot_create_address, Op.TXCREATE(tx_initcode_hash=initcode_hash))
        + Op.SSTORE(slot_create_address_2, Op.TXCREATE(tx_initcode_hash=initcode_hash))
        + Op.SSTORE(slot_create_address_3, Op.TXCREATE(tx_initcode_hash=initcode_hash, salt=1))
        + Op.SSTORE(slot_code_worked, value_code_worked)
        + Op.STOP,
    )
    salt_zero_address = compute_eofcreate_address(contract_address, 0)
    salt_one_address = compute_eofcreate_address(contract_address, 1)

    # Hard-code address for collision, no other way to do this.
    # We should mark tests that do this, and fail on unmarked tests.
    pre[salt_one_address] = Account(balance=1, nonce=1)

    post = {
        contract_address: Account(
            storage={
                slot_create_address: salt_zero_address,
                slot_create_address_2: TXCREATE_FAILURE,  # had an in-transaction collision
                slot_create_address_3: TXCREATE_FAILURE,  # had a pre-existing collision
                slot_code_worked: value_code_worked,
            }
        )
    }

    # Multiple create fails is expensive, use an absurd amount of gas
    tx = Transaction(
        to=contract_address,
        gas_limit=300_000_000_000,
        sender=sender,
        initcodes=[smallest_initcode_subcontainer],
    )
    state_test(env=env, pre=pre, post=post, tx=tx)

Parametrized Test Cases

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

Test ID (Abbreviated) evm_code_type
...fork_Osaka-evm_code_type_LEGACY-state_test LEGACY
...fork_Osaka-evm_code_type_LEGACY-blockchain_test_from_state_test LEGACY
...fork_Osaka-evm_code_type_EOF_V1-state_test EOF_V1
...fork_Osaka-evm_code_type_EOF_V1-blockchain_test_from_state_test EOF_V1