Skip to content

Commit 4708376

Browse files
gurukamathSamWilsn
authored andcommitted
introduce warm_code_addresses
1 parent f069e08 commit 4708376

File tree

8 files changed

+29
-2
lines changed

8 files changed

+29
-2
lines changed

src/ethereum/osaka/fork.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,7 @@ def process_system_transaction(
628628
accessed_addresses=set(),
629629
accessed_storage_keys=set(),
630630
disable_precompiles=False,
631+
warm_code_addresses=set(),
631632
parent_evm=None,
632633
)
633634

src/ethereum/osaka/utils/message.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,5 +86,6 @@ def prepare_message(
8686
accessed_addresses=accessed_addresses,
8787
accessed_storage_keys=set(tx_env.access_list_storage_keys),
8888
disable_precompiles=False,
89+
warm_code_addresses=set(),
8990
parent_evm=None,
9091
)

src/ethereum/osaka/vm/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ class Message:
133133
accessed_addresses: Set[Address]
134134
accessed_storage_keys: Set[Tuple[Address, Bytes32]]
135135
disable_precompiles: bool
136+
warm_code_addresses: Set[Address]
136137
parent_evm: Optional["Evm"]
137138

138139

@@ -156,6 +157,7 @@ class Evm:
156157
error: Optional[EthereumException]
157158
accessed_addresses: Set[Address]
158159
accessed_storage_keys: Set[Tuple[Address, Bytes32]]
160+
warm_code_addresses: Set[Address]
159161

160162

161163
def incorporate_child_on_success(evm: Evm, child_evm: Evm) -> None:
@@ -175,6 +177,7 @@ def incorporate_child_on_success(evm: Evm, child_evm: Evm) -> None:
175177
evm.accounts_to_delete.update(child_evm.accounts_to_delete)
176178
evm.accessed_addresses.update(child_evm.accessed_addresses)
177179
evm.accessed_storage_keys.update(child_evm.accessed_storage_keys)
180+
evm.warm_code_addresses.update(child_evm.warm_code_addresses)
178181

179182

180183
def incorporate_child_on_error(evm: Evm, child_evm: Evm) -> None:

src/ethereum/osaka/vm/eoa_delegation.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ def access_delegation(
142142
else:
143143
evm.accessed_addresses.add(address)
144144
access_gas_cost = GAS_COLD_ACCOUNT_ACCESS
145+
146+
if address not in evm.warm_code_addresses:
147+
evm.warm_code_addresses.add(address)
145148
access_gas_cost += code_access_cost(code)
146149

147150
return True, address, code, access_gas_cost

src/ethereum/osaka/vm/gas.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@
6666
GAS_COLD_ACCOUNT_ACCESS = Uint(2600)
6767
GAS_WARM_ACCESS = Uint(100)
6868
GAS_INIT_CODE_WORD_COST = Uint(2)
69-
GAS_EXCESS_WORD_COST = Uint(2)
7069
GAS_BLOBHASH_OPCODE = Uint(3)
7170
GAS_POINT_EVALUATION = Uint(50000)
7271

@@ -305,7 +304,9 @@ def code_access_cost(code: Bytes) -> Uint:
305304
return Uint(0)
306305

307306
return (
308-
GAS_EXCESS_WORD_COST * ceil32(Uint(excess_contract_size)) // Uint(32)
307+
GAS_INIT_CODE_WORD_COST
308+
* ceil32(Uint(excess_contract_size))
309+
// Uint(32)
309310
)
310311

311312

src/ethereum/osaka/vm/instructions/environment.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,9 @@ def extcodecopy(evm: Evm) -> None:
389389
else:
390390
evm.accessed_addresses.add(address)
391391
access_gas_cost = GAS_COLD_ACCOUNT_ACCESS
392+
393+
if address not in evm.warm_code_addresses:
394+
evm.warm_code_addresses.add(address)
392395
access_gas_cost += code_access_cost(
393396
get_account(evm.message.block_env.state, address).code
394397
)

src/ethereum/osaka/vm/instructions/system.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ def generic_create(
133133
accessed_addresses=evm.accessed_addresses.copy(),
134134
accessed_storage_keys=evm.accessed_storage_keys.copy(),
135135
disable_precompiles=False,
136+
warm_code_addresses=evm.warm_code_addresses.copy(),
136137
parent_evm=evm,
137138
)
138139
child_evm = process_create_message(child_message)
@@ -323,6 +324,7 @@ def generic_call(
323324
accessed_addresses=evm.accessed_addresses.copy(),
324325
accessed_storage_keys=evm.accessed_storage_keys.copy(),
325326
disable_precompiles=disable_precompiles,
327+
warm_code_addresses=evm.warm_code_addresses.copy(),
326328
parent_evm=evm,
327329
)
328330
child_evm = process_message(child_message)
@@ -376,6 +378,9 @@ def call(evm: Evm) -> None:
376378
else:
377379
evm.accessed_addresses.add(to)
378380
access_gas_cost = GAS_COLD_ACCOUNT_ACCESS
381+
382+
if to not in evm.warm_code_addresses:
383+
evm.warm_code_addresses.add(to)
379384
access_gas_cost += code_access_cost(
380385
get_account(evm.message.block_env.state, to).code
381386
)
@@ -469,6 +474,9 @@ def callcode(evm: Evm) -> None:
469474
else:
470475
evm.accessed_addresses.add(code_address)
471476
access_gas_cost = GAS_COLD_ACCOUNT_ACCESS
477+
478+
if code_address not in evm.warm_code_addresses:
479+
evm.warm_code_addresses.add(code_address)
472480
access_gas_cost += code_access_cost(
473481
get_account(evm.message.block_env.state, code_address).code
474482
)
@@ -611,6 +619,9 @@ def delegatecall(evm: Evm) -> None:
611619
else:
612620
evm.accessed_addresses.add(code_address)
613621
access_gas_cost = GAS_COLD_ACCOUNT_ACCESS
622+
623+
if code_address not in evm.warm_code_addresses:
624+
evm.warm_code_addresses.add(code_address)
614625
access_gas_cost += code_access_cost(
615626
get_account(evm.message.block_env.state, code_address).code
616627
)
@@ -682,6 +693,9 @@ def staticcall(evm: Evm) -> None:
682693
else:
683694
evm.accessed_addresses.add(to)
684695
access_gas_cost = GAS_COLD_ACCOUNT_ACCESS
696+
697+
if to not in evm.warm_code_addresses:
698+
evm.warm_code_addresses.add(to)
685699
access_gas_cost += code_access_cost(
686700
get_account(evm.message.block_env.state, to).code
687701
)

src/ethereum/osaka/vm/interpreter.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ def execute_code(message: Message) -> Evm:
288288
error=None,
289289
accessed_addresses=message.accessed_addresses,
290290
accessed_storage_keys=message.accessed_storage_keys,
291+
warm_code_addresses=message.warm_code_addresses,
291292
)
292293
try:
293294
if evm.message.code_address in PRE_COMPILED_CONTRACTS:

0 commit comments

Comments
 (0)