Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 2 additions & 10 deletions src/ethereum/forks/amsterdam/fork.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@
set_account_balance,
)
from .transactions import (
AccessListTransaction,
BlobTransaction,
FeeMarketTransaction,
LegacyTransaction,
Expand All @@ -86,6 +85,7 @@
decode_transaction,
encode_transaction,
get_transaction_hash,
has_access_list,
recover_sender,
validate_transaction,
)
Expand Down Expand Up @@ -998,15 +998,7 @@ def process_transaction(
access_list_addresses = set()
access_list_storage_keys = set()
access_list_addresses.add(block_env.coinbase)
if isinstance(
tx,
(
AccessListTransaction,
FeeMarketTransaction,
BlobTransaction,
SetCodeTransaction,
),
):
if has_access_list(tx):
for access in tx.access_list:
access_list_addresses.add(access.account)
for slot in access.slots:
Expand Down
43 changes: 33 additions & 10 deletions src/ethereum/forks/amsterdam/transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"""

from dataclasses import dataclass
from typing import Tuple
from typing import Tuple, TypeGuard

from ethereum_rlp import rlp
from ethereum_types.bytes import Bytes, Bytes0, Bytes32
Expand Down Expand Up @@ -481,6 +481,23 @@ class SetCodeTransaction:
"""


AccessListCapableTransaction = (
AccessListTransaction
| FeeMarketTransaction
| BlobTransaction
| SetCodeTransaction
)
"""
Transaction types that include an [EIP-2930]-style access list.

See [`has_access_list`][hal] and [`Access`][a] for more details.

[EIP-2930]: https://eips.ethereum.org/EIPS/eip-2930
[hal]: ref:ethereum.forks.amsterdam.transactions.has_access_list
[a]: ref:ethereum.forks.amsterdam.transactions.Access
"""


def encode_transaction(tx: Transaction) -> LegacyTransaction | Bytes:
"""
Encode a transaction into its RLP or typed transaction format.
Expand Down Expand Up @@ -622,15 +639,7 @@ def calculate_intrinsic_cost(tx: Transaction) -> Tuple[Uint, Uint]:
create_cost = Uint(0)

access_list_cost = Uint(0)
if isinstance(
tx,
(
AccessListTransaction,
FeeMarketTransaction,
BlobTransaction,
SetCodeTransaction,
),
):
if has_access_list(tx):
for access in tx.access_list:
access_list_cost += GAS_TX_ACCESS_LIST_ADDRESS
access_list_cost += (
Expand Down Expand Up @@ -891,3 +900,17 @@ def get_transaction_hash(tx: Bytes | LegacyTransaction) -> Hash32:
return keccak256(rlp.encode(tx))
else:
return keccak256(tx)


def has_access_list(
tx: Transaction,
) -> TypeGuard[AccessListCapableTransaction]:
"""
Return whether the transaction has an [EIP-2930]-style access list.

[EIP-2930]: https://eips.ethereum.org/EIPS/eip-2930
"""
return isinstance(
tx,
AccessListCapableTransaction,
)
12 changes: 2 additions & 10 deletions src/ethereum/forks/bpo1/fork.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@
state_root,
)
from .transactions import (
AccessListTransaction,
BlobTransaction,
FeeMarketTransaction,
LegacyTransaction,
Expand All @@ -72,6 +71,7 @@
decode_transaction,
encode_transaction,
get_transaction_hash,
has_access_list,
recover_sender,
validate_transaction,
)
Expand Down Expand Up @@ -916,15 +916,7 @@ def process_transaction(
access_list_addresses = set()
access_list_storage_keys = set()
access_list_addresses.add(block_env.coinbase)
if isinstance(
tx,
(
AccessListTransaction,
FeeMarketTransaction,
BlobTransaction,
SetCodeTransaction,
),
):
if has_access_list(tx):
for access in tx.access_list:
access_list_addresses.add(access.account)
for slot in access.slots:
Expand Down
43 changes: 33 additions & 10 deletions src/ethereum/forks/bpo1/transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"""

from dataclasses import dataclass
from typing import Tuple
from typing import Tuple, TypeGuard

from ethereum_rlp import rlp
from ethereum_types.bytes import Bytes, Bytes0, Bytes32
Expand Down Expand Up @@ -481,6 +481,23 @@ class SetCodeTransaction:
"""


AccessListCapableTransaction = (
AccessListTransaction
| FeeMarketTransaction
| BlobTransaction
| SetCodeTransaction
)
"""
Transaction types that include an [EIP-2930]-style access list.

See [`has_access_list`][hal] and [`Access`][a] for more details.

[EIP-2930]: https://eips.ethereum.org/EIPS/eip-2930
[hal]: ref:ethereum.forks.amsterdam.transactions.has_access_list
[a]: ref:ethereum.forks.amsterdam.transactions.Access
"""


def encode_transaction(tx: Transaction) -> LegacyTransaction | Bytes:
"""
Encode a transaction into its RLP or typed transaction format.
Expand Down Expand Up @@ -615,15 +632,7 @@ def calculate_intrinsic_cost(tx: Transaction) -> Tuple[Uint, Uint]:
create_cost = Uint(0)

access_list_cost = Uint(0)
if isinstance(
tx,
(
AccessListTransaction,
FeeMarketTransaction,
BlobTransaction,
SetCodeTransaction,
),
):
if has_access_list(tx):
for access in tx.access_list:
access_list_cost += GAS_TX_ACCESS_LIST_ADDRESS
access_list_cost += (
Expand Down Expand Up @@ -884,3 +893,17 @@ def get_transaction_hash(tx: Bytes | LegacyTransaction) -> Hash32:
return keccak256(rlp.encode(tx))
else:
return keccak256(tx)


def has_access_list(
tx: Transaction,
) -> TypeGuard[AccessListCapableTransaction]:
"""
Return whether the transaction has an [EIP-2930]-style access list.

[EIP-2930]: https://eips.ethereum.org/EIPS/eip-2930
"""
return isinstance(
tx,
AccessListCapableTransaction,
)
12 changes: 2 additions & 10 deletions src/ethereum/forks/bpo2/fork.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@
state_root,
)
from .transactions import (
AccessListTransaction,
BlobTransaction,
FeeMarketTransaction,
LegacyTransaction,
Expand All @@ -72,6 +71,7 @@
decode_transaction,
encode_transaction,
get_transaction_hash,
has_access_list,
recover_sender,
validate_transaction,
)
Expand Down Expand Up @@ -916,15 +916,7 @@ def process_transaction(
access_list_addresses = set()
access_list_storage_keys = set()
access_list_addresses.add(block_env.coinbase)
if isinstance(
tx,
(
AccessListTransaction,
FeeMarketTransaction,
BlobTransaction,
SetCodeTransaction,
),
):
if has_access_list(tx):
for access in tx.access_list:
access_list_addresses.add(access.account)
for slot in access.slots:
Expand Down
43 changes: 33 additions & 10 deletions src/ethereum/forks/bpo2/transactions.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"""

from dataclasses import dataclass
from typing import Tuple
from typing import Tuple, TypeGuard

from ethereum_rlp import rlp
from ethereum_types.bytes import Bytes, Bytes0, Bytes32
Expand Down Expand Up @@ -481,6 +481,23 @@ class SetCodeTransaction:
"""


AccessListCapableTransaction = (
AccessListTransaction
| FeeMarketTransaction
| BlobTransaction
| SetCodeTransaction
)
"""
Transaction types that include an [EIP-2930]-style access list.

See [`has_access_list`][hal] and [`Access`][a] for more details.

[EIP-2930]: https://eips.ethereum.org/EIPS/eip-2930
[hal]: ref:ethereum.forks.amsterdam.transactions.has_access_list
[a]: ref:ethereum.forks.amsterdam.transactions.Access
"""


def encode_transaction(tx: Transaction) -> LegacyTransaction | Bytes:
"""
Encode a transaction into its RLP or typed transaction format.
Expand Down Expand Up @@ -615,15 +632,7 @@ def calculate_intrinsic_cost(tx: Transaction) -> Tuple[Uint, Uint]:
create_cost = Uint(0)

access_list_cost = Uint(0)
if isinstance(
tx,
(
AccessListTransaction,
FeeMarketTransaction,
BlobTransaction,
SetCodeTransaction,
),
):
if has_access_list(tx):
for access in tx.access_list:
access_list_cost += GAS_TX_ACCESS_LIST_ADDRESS
access_list_cost += (
Expand Down Expand Up @@ -884,3 +893,17 @@ def get_transaction_hash(tx: Bytes | LegacyTransaction) -> Hash32:
return keccak256(rlp.encode(tx))
else:
return keccak256(tx)


def has_access_list(
tx: Transaction,
) -> TypeGuard[AccessListCapableTransaction]:
"""
Return whether the transaction has an [EIP-2930]-style access list.

[EIP-2930]: https://eips.ethereum.org/EIPS/eip-2930
"""
return isinstance(
tx,
AccessListCapableTransaction,
)
12 changes: 2 additions & 10 deletions src/ethereum/forks/bpo3/fork.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@
state_root,
)
from .transactions import (
AccessListTransaction,
BlobTransaction,
FeeMarketTransaction,
LegacyTransaction,
Expand All @@ -72,6 +71,7 @@
decode_transaction,
encode_transaction,
get_transaction_hash,
has_access_list,
recover_sender,
validate_transaction,
)
Expand Down Expand Up @@ -916,15 +916,7 @@ def process_transaction(
access_list_addresses = set()
access_list_storage_keys = set()
access_list_addresses.add(block_env.coinbase)
if isinstance(
tx,
(
AccessListTransaction,
FeeMarketTransaction,
BlobTransaction,
SetCodeTransaction,
),
):
if has_access_list(tx):
for access in tx.access_list:
access_list_addresses.add(access.account)
for slot in access.slots:
Expand Down
Loading
Loading