Skip to content

Commit 57480e6

Browse files
committed
Resolve CREATE-derived addresses in post-state storage values
1 parent 4221724 commit 57480e6

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

scripts/filler_to_python/analyzer.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,7 @@ def _build_parameters(model: StateStaticTest) -> list[ParameterCaseIR]:
620620
def _resolve_storage_values(
621621
storage: dict[int, int],
622622
addr_to_var: dict[Address | EOA, str],
623+
imports: ImportsIR | None = None,
623624
) -> dict[int, int | str]:
624625
"""Replace storage values matching known addresses with var names."""
625626
if not storage or not addr_to_var:
@@ -628,10 +629,25 @@ def _resolve_storage_values(
628629
int_to_var: dict[int, str] = {}
629630
for addr, var_name in addr_to_var.items():
630631
int_to_var[int.from_bytes(addr, "big")] = var_name
632+
# Also build CREATE-derived address lookup
633+
create_to_expr: dict[int, str] = {}
634+
for addr, var_name in addr_to_var.items():
635+
for nonce in range(256):
636+
created = compute_create_address(address=addr, nonce=nonce)
637+
created_int = int.from_bytes(created, "big")
638+
if created_int not in int_to_var:
639+
create_to_expr[created_int] = (
640+
f"compute_create_address(address={var_name},"
641+
f" nonce={nonce})"
642+
)
631643
result: dict[int, int | str] = {}
632644
for k, v in storage.items():
633645
if v in int_to_var:
634646
result[k] = int_to_var[v]
647+
elif v in create_to_expr:
648+
if imports is not None:
649+
imports.needs_compute_create_address = True
650+
result[k] = create_to_expr[v]
635651
else:
636652
result[k] = v
637653
return result
@@ -775,7 +791,9 @@ def _build_accounts(
775791
resolved_storage = account.storage.resolve(tags)
776792
for k, v in resolved_storage.items():
777793
storage[int(k)] = int(v)
778-
storage = _resolve_storage_values(storage, addr_to_var)
794+
storage = _resolve_storage_values(
795+
storage, addr_to_var, imports
796+
)
779797

780798
# Balance and nonce
781799
balance = int(account.balance) if account.balance is not None else 0
@@ -1098,7 +1116,9 @@ def _build_expect_entries(
10981116
resolved_storage = account_expect.storage.resolve(tags)
10991117
for k, v in resolved_storage.items():
11001118
storage[int(k)] = int(v)
1101-
storage = _resolve_storage_values(storage, addr_to_var)
1119+
storage = _resolve_storage_values(
1120+
storage, addr_to_var, imports
1121+
)
11021122
# Capture ANY keys from _any_map
11031123
if hasattr(resolved_storage, "_any_map"):
11041124
for k in resolved_storage._any_map:

0 commit comments

Comments
 (0)