Skip to content

Commit 9870841

Browse files
committed
Get rid of ignores regarding SpoofTransaction
1 parent dbbb8d9 commit 9870841

File tree

11 files changed

+73
-51
lines changed

11 files changed

+73
-51
lines changed

eth/chains/base.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,10 @@
7676

7777
from eth.typing import ( # noqa: F401
7878
AccountState,
79+
BaseOrSpoofTransaction,
7980
StaticMethod,
8081
)
8182

82-
from eth.utils.spoof import (
83-
SpoofTransaction,
84-
)
8583
from eth.utils.db import (
8684
apply_state_dict,
8785
)
@@ -280,14 +278,14 @@ def get_canonical_transaction(self, transaction_hash: Hash32) -> BaseTransaction
280278
@abstractmethod
281279
def get_transaction_result(
282280
self,
283-
transaction: Union[BaseTransaction, SpoofTransaction],
281+
transaction: BaseOrSpoofTransaction,
284282
at_header: BlockHeader) -> bytes:
285283
raise NotImplementedError("Chain classes must implement this method")
286284

287285
@abstractmethod
288286
def estimate_gas(
289287
self,
290-
transaction: Union[BaseTransaction, SpoofTransaction],
288+
transaction: BaseOrSpoofTransaction,
291289
at_header: BlockHeader=None) -> int:
292290
raise NotImplementedError("Chain classes must implement this method")
293291

@@ -338,7 +336,7 @@ class Chain(BaseChain):
338336
current block number.
339337
"""
340338
logger = logging.getLogger("eth.chain.chain.Chain")
341-
gas_estimator = None # type: StaticMethod[Callable[[BaseState, Union[BaseTransaction, SpoofTransaction]], int]] # noqa: E501
339+
gas_estimator = None # type: StaticMethod[Callable[[BaseState, BaseOrSpoofTransaction], int]]
342340

343341
chaindb_class = ChainDB # type: Type[BaseChainDB]
344342

@@ -627,22 +625,21 @@ def create_unsigned_transaction(self,
627625
#
628626
def get_transaction_result(
629627
self,
630-
transaction: Union[BaseTransaction, SpoofTransaction],
628+
transaction: BaseOrSpoofTransaction,
631629
at_header: BlockHeader) -> bytes:
632630
"""
633631
Return the result of running the given transaction.
634632
This is referred to as a `call()` in web3.
635633
"""
636634
with self.get_vm(at_header).state_in_temp_block() as state:
637-
# Ignore is to not bleed the SpoofTransaction deeper into the code base
638-
computation = state.costless_execute_transaction(transaction) # type: ignore
635+
computation = state.costless_execute_transaction(transaction)
639636

640637
computation.raise_if_error()
641638
return computation.output
642639

643640
def estimate_gas(
644641
self,
645-
transaction: Union[BaseTransaction, SpoofTransaction],
642+
transaction: BaseOrSpoofTransaction,
646643
at_header: BlockHeader=None) -> int:
647644
"""
648645
Returns an estimation of the amount of gas the given transaction will

eth/estimators/__init__.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,25 @@
22
from typing import (
33
Callable,
44
cast,
5-
Union,
65
)
76

8-
from eth.rlp.transactions import (
9-
BaseTransaction,
7+
from eth.typing import (
8+
BaseOrSpoofTransaction,
109
)
1110
from eth.utils.module_loading import (
1211
import_string,
1312
)
14-
from eth.utils.spoof import (
15-
SpoofTransaction,
16-
)
1713
from eth.vm.state import (
1814
BaseState,
1915
)
2016

2117

22-
def get_gas_estimator() -> Callable[[BaseState, Union[BaseTransaction, SpoofTransaction]], int]:
18+
def get_gas_estimator() -> Callable[[BaseState, BaseOrSpoofTransaction], int]:
2319
import_path = os.environ.get(
2420
'GAS_ESTIMATOR_BACKEND_FUNC',
2521
'eth.estimators.gas.binary_gas_search_intrinsic_tolerance',
2622
)
2723
return cast(
28-
Callable[[BaseState, Union[BaseTransaction, SpoofTransaction]], int],
24+
Callable[[BaseState, BaseOrSpoofTransaction], int],
2925
import_string(import_path)
3026
)

eth/estimators/gas.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from typing import (
2-
cast,
32
Optional,
43
)
54

@@ -29,7 +28,7 @@ def _get_computation_error(state: BaseState, transaction: SpoofTransaction) -> O
2928
snapshot = state.snapshot()
3029

3130
try:
32-
computation = state.execute_transaction(cast(BaseTransaction, transaction))
31+
computation = state.execute_transaction(transaction)
3332
if computation.is_error:
3433
return computation._error
3534
else:

eth/typing.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
Tuple,
1010
Union,
1111
TypeVar,
12+
TYPE_CHECKING,
1213
)
1314

1415
from eth_typing import (
@@ -19,6 +20,14 @@
1920
TypedDict,
2021
)
2122

23+
if TYPE_CHECKING:
24+
from eth.rlp.transactions import ( # noqa: F401
25+
BaseTransaction
26+
)
27+
from eth.utils.spoof import ( # noqa: F401
28+
SpoofTransaction
29+
)
30+
2231

2332
# TODO: Move into eth_typing
2433

@@ -32,6 +41,8 @@
3241

3342
AccountDiff = Iterable[Tuple[Address, str, Union[int, bytes], Union[int, bytes]]]
3443

44+
BaseOrSpoofTransaction = Union['BaseTransaction', 'SpoofTransaction']
45+
3546
GeneralState = Union[
3647
AccountState,
3748
List[Tuple[Address, Dict[str, Union[int, bytes, Dict[int, int]]]]]

eth/vm/forks/frontier/state.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from __future__ import absolute_import
2-
from typing import Type # noqa: F401
2+
from typing import Type, Union # noqa: F401
33

44
from eth_hash.auto import keccak
55
from eth_utils import (
@@ -14,10 +14,9 @@
1414
ContractCreationCollision,
1515
)
1616

17-
from eth.rlp.transactions import (
18-
BaseTransaction,
17+
from eth.typing import (
18+
BaseOrSpoofTransaction,
1919
)
20-
2120
from eth.utils.address import (
2221
generate_contract_address,
2322
)
@@ -45,15 +44,15 @@
4544

4645
class FrontierTransactionExecutor(BaseTransactionExecutor):
4746

48-
def validate_transaction(self, transaction: BaseTransaction) -> BaseTransaction:
47+
def validate_transaction(self, transaction: BaseOrSpoofTransaction) -> BaseOrSpoofTransaction:
4948

5049
# Validate the transaction
5150
transaction.validate()
5251
self.vm_state.validate_transaction(transaction)
5352

5453
return transaction
5554

56-
def build_evm_message(self, transaction: BaseTransaction) -> Message:
55+
def build_evm_message(self, transaction: BaseOrSpoofTransaction) -> Message:
5756

5857
gas_fee = transaction.gas * transaction.gas_price
5958

@@ -105,7 +104,9 @@ def build_evm_message(self, transaction: BaseTransaction) -> Message:
105104
)
106105
return message
107106

108-
def build_computation(self, message: Message, transaction: BaseTransaction) -> BaseComputation:
107+
def build_computation(self,
108+
message: Message,
109+
transaction: BaseOrSpoofTransaction) -> BaseComputation:
109110
"""Apply the message to the VM."""
110111
transaction_context = self.vm_state.get_transaction_context(transaction)
111112
if message.is_create:
@@ -139,7 +140,7 @@ def build_computation(self, message: Message, transaction: BaseTransaction) -> B
139140
return computation
140141

141142
def finalize_computation(self,
142-
transaction: BaseTransaction,
143+
transaction: BaseOrSpoofTransaction,
143144
computation: BaseComputation) -> BaseComputation:
144145
# Self Destruct Refunds
145146
num_deletions = len(computation.get_accounts_for_deletion())
@@ -192,9 +193,9 @@ class FrontierState(BaseState):
192193
account_db_class = AccountDB # Type[BaseAccountDB]
193194
transaction_executor = FrontierTransactionExecutor # Type[BaseTransactionExecutor]
194195

195-
def validate_transaction(self, transaction: BaseTransaction) -> None:
196+
def validate_transaction(self, transaction: BaseOrSpoofTransaction) -> None:
196197
validate_frontier_transaction(self.account_db, transaction)
197198

198-
def execute_transaction(self, transaction: BaseTransaction) -> BaseTransactionExecutor:
199+
def execute_transaction(self, transaction: BaseOrSpoofTransaction) -> BaseTransactionExecutor:
199200
executor = self.get_transaction_executor()
200201
return executor(transaction)

eth/vm/forks/frontier/validation.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,18 @@
55
from eth.db.account import BaseAccountDB
66

77
from eth.rlp.headers import BlockHeader
8+
89
from eth.rlp.transactions import BaseTransaction
910

11+
from eth.typing import (
12+
BaseOrSpoofTransaction
13+
)
14+
1015
from eth.vm.base import BaseVM
1116

1217

13-
def validate_frontier_transaction(account_db: BaseAccountDB, transaction: BaseTransaction) -> None:
18+
def validate_frontier_transaction(account_db: BaseAccountDB,
19+
transaction: BaseOrSpoofTransaction) -> None:
1420
gas_cost = transaction.gas * transaction.gas_price
1521
sender_balance = account_db.get_balance(transaction.sender)
1622

eth/vm/forks/homestead/state.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from eth.rlp.transactions import BaseTransaction
1+
from eth.typing import (
2+
BaseOrSpoofTransaction,
3+
)
24

35
from eth.vm.forks.frontier.state import (
46
FrontierState,
@@ -12,7 +14,7 @@
1214
class HomesteadState(FrontierState):
1315
computation_class = HomesteadComputation
1416

15-
def validate_transaction(self, transaction: BaseTransaction) -> None:
17+
def validate_transaction(self, transaction: BaseOrSpoofTransaction) -> None:
1618
validate_homestead_transaction(self.account_db, transaction)
1719

1820

eth/vm/forks/homestead/validation.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88

99
from eth.db.account import BaseAccountDB
1010

11-
from eth.rlp.transactions import BaseTransaction
11+
from eth.typing import BaseOrSpoofTransaction
1212

1313
from eth.vm.forks.frontier.validation import (
1414
validate_frontier_transaction,
1515
)
1616

1717

18-
def validate_homestead_transaction(account_db: BaseAccountDB, transaction: BaseTransaction) -> None:
18+
def validate_homestead_transaction(account_db: BaseAccountDB,
19+
transaction: BaseOrSpoofTransaction) -> None:
1920
if transaction.s > SECPK1_N // 2 or transaction.s == 0:
2021
raise ValidationError("Invalid signature S value")
2122

eth/vm/forks/spurious_dragon/state.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
from eth.rlp.transactions import BaseTransaction
2-
31
from eth_utils import (
42
encode_hex,
53
)
64

5+
from eth.typing import (
6+
BaseOrSpoofTransaction,
7+
)
8+
79
from eth.vm.computation import BaseComputation
810

911
from eth.vm.forks.homestead.state import (
@@ -17,7 +19,7 @@
1719

1820
class SpuriousDragonTransactionExecutor(HomesteadTransactionExecutor):
1921
def finalize_computation(self,
20-
transaction: BaseTransaction,
22+
transaction: BaseOrSpoofTransaction,
2123
computation: BaseComputation) -> BaseComputation:
2224
computation = super().finalize_computation(transaction, computation)
2325

eth/vm/state.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
Tuple,
1212
Type,
1313
TYPE_CHECKING,
14+
Union,
1415
)
1516
from uuid import UUID
1617

@@ -34,6 +35,9 @@
3435
from eth.tools.logging import (
3536
TraceLogger,
3637
)
38+
from eth.typing import (
39+
BaseOrSpoofTransaction,
40+
)
3741
from eth.utils.datatypes import (
3842
Configurable,
3943
)
@@ -49,6 +53,7 @@
4953
from eth.rlp.transactions import ( # noqa: F401
5054
BaseTransaction,
5155
)
56+
5257
from eth.vm.transaction_context import ( # noqa: F401
5358
BaseTransactionContext,
5459
)
@@ -250,7 +255,8 @@ def apply_transaction(self, transaction: 'BaseTransaction') -> Tuple[bytes, 'Bas
250255
def get_transaction_executor(self) -> 'BaseTransactionExecutor':
251256
return self.transaction_executor(self)
252257

253-
def costless_execute_transaction(self, transaction: 'BaseTransaction') -> 'BaseComputation':
258+
def costless_execute_transaction(self,
259+
transaction: BaseOrSpoofTransaction) -> 'BaseComputation':
254260
with self.override_transaction_context(gas_price=transaction.gas_price):
255261
free_transaction = transaction.copy(gas_price=0)
256262
return self.execute_transaction(free_transaction)
@@ -270,15 +276,16 @@ def get_custom_transaction_context(transaction: 'BaseTransaction') -> 'BaseTrans
270276
self.get_transaction_context = original_context # type: ignore # Remove ignore if https://github.com/python/mypy/issues/708 is fixed. # noqa: E501
271277

272278
@abstractmethod
273-
def execute_transaction(self, transaction: 'BaseTransaction') -> 'BaseComputation':
279+
def execute_transaction(self, transaction: BaseOrSpoofTransaction) -> 'BaseComputation':
274280
raise NotImplementedError()
275281

276282
@abstractmethod
277-
def validate_transaction(self, transaction: 'BaseTransaction') -> None:
283+
def validate_transaction(self, transaction: BaseOrSpoofTransaction) -> None:
278284
raise NotImplementedError
279285

280286
@classmethod
281-
def get_transaction_context(cls, transaction: 'BaseTransaction') -> 'BaseTransactionContext':
287+
def get_transaction_context(cls,
288+
transaction: BaseOrSpoofTransaction) -> 'BaseTransactionContext':
282289
return cls.get_transaction_context_class()(
283290
gas_price=transaction.gas_price,
284291
origin=transaction.sender,
@@ -289,29 +296,29 @@ class BaseTransactionExecutor(ABC):
289296
def __init__(self, vm_state: BaseState) -> None:
290297
self.vm_state = vm_state
291298

292-
def __call__(self, transaction: 'BaseTransaction') -> 'BaseComputation':
299+
def __call__(self, transaction: BaseOrSpoofTransaction) -> 'BaseComputation':
293300
valid_transaction = self.validate_transaction(transaction)
294301
message = self.build_evm_message(valid_transaction)
295302
computation = self.build_computation(message, valid_transaction)
296303
finalized_computation = self.finalize_computation(valid_transaction, computation)
297304
return finalized_computation
298305

299306
@abstractmethod
300-
def validate_transaction(self, transaction: 'BaseTransaction') -> 'BaseTransaction':
307+
def validate_transaction(self, transaction: BaseOrSpoofTransaction) -> BaseOrSpoofTransaction:
301308
raise NotImplementedError
302309

303310
@abstractmethod
304-
def build_evm_message(self, transaction: 'BaseTransaction') -> Message:
311+
def build_evm_message(self, transaction: BaseOrSpoofTransaction) -> Message:
305312
raise NotImplementedError()
306313

307314
@abstractmethod
308315
def build_computation(self,
309316
message: Message,
310-
transaction: 'BaseTransaction') -> 'BaseComputation':
317+
transaction: BaseOrSpoofTransaction) -> 'BaseComputation':
311318
raise NotImplementedError()
312319

313320
@abstractmethod
314321
def finalize_computation(self,
315-
transaction: 'BaseTransaction',
322+
transaction: BaseOrSpoofTransaction,
316323
computation: 'BaseComputation') -> 'BaseComputation':
317324
raise NotImplementedError()

0 commit comments

Comments
 (0)