1- from typing import TYPE_CHECKING , Any , Dict , List , Optional
1+ from typing import TYPE_CHECKING , Any , Dict , List , Optional , Union
22
33from eth_utils import to_bytes
44
5- from ape .types import ABI , ContractType
5+ from ape .types import ABI , AddressType , ContractType
66from ape .utils import notify
77
88from .address import Address , AddressAPI
99from .base import dataclass
1010from .providers import ProviderAPI , ReceiptAPI , TransactionAPI
1111
1212if TYPE_CHECKING :
13+ from ape .managers .converters import ConversionManager
1314 from ape .managers .networks import NetworkManager
1415
1516
@@ -47,7 +48,7 @@ def __call__(self, *args, **kwargs) -> ReceiptAPI:
4748@dataclass
4849class ContractCall :
4950 abi : ABI
50- address : str
51+ address : AddressType
5152 provider : ProviderAPI
5253
5354 def __repr__ (self ) -> str :
@@ -82,7 +83,7 @@ def __call__(self, *args, **kwargs) -> Any:
8283@dataclass
8384class ContractCallHandler :
8485 provider : ProviderAPI
85- address : str
86+ address : AddressType
8687 abis : List [ABI ]
8788
8889 def __repr__ (self ) -> str :
@@ -108,7 +109,7 @@ def __call__(self, *args, **kwargs) -> Any:
108109@dataclass
109110class ContractTransaction :
110111 abi : ABI
111- address : str
112+ address : AddressType
112113 provider : ProviderAPI
113114
114115 def __repr__ (self ) -> str :
@@ -135,7 +136,7 @@ def __call__(self, *args, **kwargs) -> ReceiptAPI:
135136@dataclass
136137class ContractTransactionHandler :
137138 provider : ProviderAPI
138- address : str
139+ address : AddressType
139140 abis : List [ABI ]
140141
141142 def __repr__ (self ) -> str :
@@ -173,14 +174,14 @@ class ContractEvent:
173174
174175
175176class ContractInstance (AddressAPI ):
176- _address : str
177+ _address : AddressType
177178 _contract_type : ContractType
178179
179180 def __repr__ (self ) -> str :
180181 return f"<{ self ._contract_type .contractName } { self .address } >"
181182
182183 @property
183- def address (self ) -> str :
184+ def address (self ) -> AddressType :
184185 return self ._address
185186
186187 def __dir__ (self ) -> List [str ]:
@@ -272,8 +273,9 @@ def __call__(self, *args, **kwargs) -> TransactionAPI:
272273
273274
274275def _Contract (
275- address : str ,
276+ address : Union [ str , AddressAPI , AddressType ] ,
276277 networks : "NetworkManager" ,
278+ converters : "ConversionManager" ,
277279 contract_type : Optional [ContractType ] = None ,
278280) -> AddressAPI :
279281 """
@@ -301,7 +303,7 @@ def _Contract(
301303 # 3) from explorer
302304 if contract_type :
303305 return ContractInstance ( # type: ignore
304- _address = address ,
306+ _address = converters . convert ( address , AddressType ) ,
305307 _provider = networks .active_provider ,
306308 _contract_type = contract_type ,
307309 )
@@ -310,6 +312,6 @@ def _Contract(
310312 # We don't have a contract type from any source, provide raw address instead
311313 notify ("WARNING" , f"No contract type found for { address } " )
312314 return Address ( # type: ignore
313- _address = address ,
315+ _address = converters . convert ( address , AddressType ) ,
314316 _provider = networks .active_provider ,
315317 )
0 commit comments