
    (i                     f   d dl mZmZmZmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ dd	lmZ dd
lmZmZ ddlmZmZ erd dlm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)  G d de      Z* G d de      Z+d"dede,de,defdZ-dededee,ee,ef   f   ddde,defd Z.y!)#    )	TYPE_CHECKINGAnyCallable	CoroutineDictLiteralOptionalUnioncast)abi)DecodingError)is_bytes)BaseProvider)AsyncBaseProvider)RPCEndpointRPCErrorRPCResponse   )Web3TypeError)async_combine_middlewarecombine_middleware   )%default_transaction_fields_middlewareethereum_tester_middlewareEthereumTesterBaseChainBackend)	AsyncWeb3Web3)
MiddlewareMiddlewareOnionWeb3Middlewarec                        e Zd ZdZeefZd fdZdddddede	e
e
ef   f   fd	Zd
ede
defdZddeded   fdZ xZS )AsyncEthereumTesterProviderr   returnc                 `    t         |           ddlm} ddlm}  |       | _        || _        y )Nr   r   API_ENDPOINTS)super__init__
eth_testerr   "web3.providers.eth_tester.defaultsr)   ethereum_testerapi_endpoints)selfr   r)   	__class__s      O/var/www/br/venv/lib/python3.12/site-packages/web3/providers/eth_tester/main.pyr+   z$AsyncEthereumTesterProvider.__init__E   s-    	
	
  ./*    async_w3zAsyncWeb3[Any]middleware_onionr"   .c                    K   |j                         t        | j                        z   }| j                  d   }||k7  r'|t	        ||| j
                         d {   f| _        | j                  d   S 7 w)Nr   )
middlewarer4   provider_request_fn)as_tuple_of_middlewaretuple_middleware_request_func_cacher   make_request)r0   r4   r5   r7   	cache_keys        r2   request_funcz(AsyncEthereumTesterProvider.request_funcT   s     
 &<<>tGWGWAXX
,,Q/	
".)%(,(9(9 (D$ ''++s   AA5A3A5methodparamsc           	         K   t        ||| j                  | j                  t        | j                              }| xj                  dz  c_        |S wNr   _make_requestr/   r.   repr_current_request_idr0   rA   rB   responses       r2   r>   z(AsyncEthereumTesterProvider.make_requestg   sN        ))*
 	  A% s   AAshow_tracebackTc                    K   ywNT r0   rK   s     r2   is_connectedz(AsyncEthereumTesterProvider.is_connectedr   s	     s   )r&   NF)__name__
__module____qualname__rH   r   r   r<   r+   r   r   r   r   r@   r   r>   boolr   rP   __classcell__r1   s   @r2   r%   r%   >   s    -"K
+,(,<M,	#yc;!677	8,&	 	c 	k 	 '$- r3   r%   c                        e Zd ZU dZeefZdZdZe	e
ee
eedef   f   f      ed<   	 	 dde	ed      de	e
ee
eedef   f   f      ddf fdZd	d
dddedef   fdZdededefdZddeded   fdZ xZS )EthereumTesterProviderr   N.r/   r.   )r   r   r&   c                    t         |           ddlm} ddlm} | |       | _        nFt        ||      r|| _        n2t        ||      r ||      | _        nt        dt        |       d      |ddl
m} || _        y || _        y )Nr   r   r   zExpected ethereum_tester to be of type `eth_tester.EthereumTester` or a subclass of `eth_tester.backends.base.BaseChainBackend`, instead received z. If you would like a custom eth-tester instance to test with, see the eth-tester documentation. https://github.com/ethereum/eth-tester.r   r(   )r*   r+   r,   r   eth_tester.backends.baser   r.   
isinstancer   typedefaultsr)   r/   )r0   r.   r/   r   r   r)   r1   s         r2   r+   zEthereumTesterProvider.__init__   s     	-	
 "#1#3D 8#2D )9:#1/#BD $$($9#: ;TT    "/D!.Dr3   w3r    r5   r"   c                     |j                         t        | j                        z   }| j                  d   }||k7  r|t	        ||| j
                        f| _        | j                  d   S )Nr   )r7   r_   r8   r9   )r:   r;   r<   r=   r   r>   )r0   r_   r5   r7   r?   s        r2   r@   z#EthereumTesterProvider.request_func   sq    
 &<<>tGWGWAXX
,,Q/	
"")(,(9(9(D$ ''++r3   rA   rB   c           	          t        ||| j                  | j                  t        | j                              }| xj                  dz  c_        |S rD   rE   rI   s       r2   r>   z#EthereumTesterProvider.make_request   sJ       ))*
 	  A% r3   rK   Tc                      yrM   rN   rO   s     r2   rP   z#EthereumTesterProvider.is_connected   s    r3   )NNrQ   )rR   rS   rT   rH   r   r   r<   r.   r/   r	   r   strr   r   __annotations__r
   r+   r@   r   r   r>   rU   r   rP   rV   rW   s   @r2   rY   rY   v   s   -"K OPTM8Dd3k9I0J+J&K!KLMT RV &/!%(L"MN&/  d3k)9 ::;;<
&/ 
&/P,,,=,	#{"	#,&	; 	 	 	4 GDM r3   rY   resultresponse_idmessager&   c                     t        | t              r%t        t        |dt        t        d|d      d      S t        t        |d| d      S )Nz2.0i)coderg   )idjsonrpcerror)rj   rk   re   )r\   	Exceptionr   r   r   )re   rf   rg   s      r2   _make_responsern      sL    &)$! hG(LM
 	
 KEVTUUr3   rA   rB   r/   ethereum_tester_instancer   
request_idc                    ddl m} | j                  d      \  }}}	 ||   |   }		  |	||      }t	        ||      S # t        $ r}
t	        |
|d|        cY d }
~
S d }
~
ww xY w# t
        $ r}
t	        |
|d|        cY d }
~
S d }
~
w|$ r}}
|
j                  d   }	 t        |t              s|n|j                  d   }t        |      rt        j                  dg|dd        d   n|}n# t        $ r |}Y nw xY w |d	|       d }
~
ww xY w)
Nr   )TransactionFailed_zUnknown RPC Endpoint: )rg   z'RPC Endpoint has not been implemented: string   zexecution reverted: )eth_tester.exceptionsrr   	partitionKeyErrorrn   NotImplementedErrorargsr\   rm   r   r   decoder   )rA   rB   r/   ro   rp   rr   	namespacers   endpoint	delegatorerJ   	first_argraw_error_msgreasons                  r2   rF   rF      sF    $--c2Iq(X!),X6	45v>. h
335  Xa7MfX5VWWX  
=fXF
 	

  AFF1I		 ",Iy!A	y~~VWGX 
 M* 

H:}QR'89!<" 
  	F	"6vh ?@@Asi   ; 	A" 	AAAA"	D+B;DD	DAC%$D%C30D2C33DDN) )/typingr   r   r   r   r   r   r	   r
   r   eth_abir   eth_abi.exceptionsr   	eth_utilsr   web3.providersr   web3.providers.async_baser   
web3.typesr   r   r   
exceptionsr   r7   r   r   r   r   r,   r   r[   r   web3r   r    web3.middleware.baser!   r"   r#   r%   rY   rc   rn   rF   rN   r3   r2   <module>r      s   
 
 
 
 )9 5"3 5pP\ PfV3 VS V3 V V+4+4+4 T#s(^+,+4 /	+4
 +4 +4r3   