
    (i                      R   d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZmZ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 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& d dl'm(Z(m)Z) er d dl*m+Z+ d dl,m-Z-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4  G d d      Z5 G d de5      Z6y)    N)TYPE_CHECKINGAnyCallable	CoroutineDictListOptionalSetTupleUnioncast)is_textto_bytesto_text)CACHEABLE_REQUESTS)Emptyempty)FriendlyJsonSerdeWeb3JsonEncoder)ProviderConnectionError)async_combine_middleware)
MiddlewareMiddlewareOnion)RPCEndpoint
RPCRequestRPCResponse)RequestCacheValidationThresholdSimpleCache)WebSocketClientProtocol)	AsyncWeb3WebSocketProvider)RequestBatcher)RequestProcessor)AsyncCcipUrlValidatorc                   P   e Zd ZU  ej                  d      Zej                  ed<   dZe	e	e
df   edeeeef   f   f   ed<   dZdZdZeed<   d	Zeed
<   dZeed<   dZded<   ddefdedee   deeeeef      ddfdZedefd       Z ddde!dedeeeef   f   fdZ"ddde!dedeeeee#e   ef   f   f   fdZ$dededefdZ%de#e	eef      dee#e   ef   fdZ&d-dedefd Z'd!ed"<   d#ed$<   d%ed&<   d.d'Z(d.d(Z)d)ed*<   ee*jV                     ed+<   ee*jX                     ed,<   y)/AsyncBaseProviderz+web3.providers.async_base.AsyncBaseProviderloggerNN._request_func_cacheTFglobal_ccip_read_enabled   ccip_read_max_redirectsccip_read_allow_httpNzAsyncCcipUrlValidator | Noneccip_read_url_validatorcache_allowed_requestscacheable_requests"request_cache_validation_thresholdreturnc                     t        d      | _        t        j                         | _        || _        |xs t        | _        || _        t        j                  dd       | _        d| _        y )Ni  batching_context)defaultr(   )r   _request_cacheasyncioLock_request_cache_lockr/   r   r0   r1   contextvars
ContextVar_batching_context_batch_request_func_cache)selfr/   r0   r1   s       J/var/www/br/venv/lib/python3.12/site-packages/web3/providers/async_base.py__init__zAsyncBaseProvider.__init__\   se     *$/18 &<#"4"J8J2T/ ""#5tD 	  	&    c                 :    | j                   j                         d uS N)r<   getr>   s    r?   _is_batchingzAsyncBaseProvider._is_batchings   s    %%))+477rA   async_w3zAsyncWeb3[Any]middleware_onionc                    K   |j                         }| j                  d   }||k7  r'|t        ||| j                         d {   f| _        | j                  d   S 7 w)Nr   )
middlewarerG   provider_request_fn)as_tuple_of_middlewarer)   r   make_request)r>   rG   rH   rJ   	cache_keys        r?   request_funczAsyncBaseProvider.request_funcw   so      .>-T-T-V
,,Q/	
".)%(,(9(9 (D$ ''++s   AAAAc                    K   |j                         }| j                  d   }||k7  rF| j                  }t        |      D ]#  } ||      }|j	                  |       d {   }% ||f| _        | j                  d   S 7 w)Nr   rL   )rM   r=   make_batch_requestreversedasync_wrap_make_batch_request)r>   rG   rH   rJ   rO   accumulator_fnmwinitializeds           r?   batch_request_funcz$AsyncBaseProvider.batch_request_func   s      .>-T-T-V
2215	
"!44Nz*  l (3'P'P"( " /9.-ID*--b11	"s   AA>A<A>methodparamsc                     K   t        d      wNz$Providers must implement this methodNotImplementedError)r>   rY   rZ   s      r?   rN   zAsyncBaseProvider.make_request        !"HII   requestsc                     K   t        d      wr\   r]   r>   ra   s     r?   rR   z$AsyncBaseProvider.make_batch_request   s      ""HIIr`   show_tracebackc                     K   t        d      wr\   r]   )r>   rd   s     r?   is_connectedzAsyncBaseProvider.is_connected   r_   r`   r#   _request_processorzasyncio.Task[None]_message_listener_taskzasyncio.Event_listen_eventc                     K   t        d      wNz:Persistent connection providers must implement this methodr]   rE   s    r?   connectzAsyncBaseProvider.connect        !H
 	
r`   c                     K   t        d      wrk   r]   rE   s    r?   
disconnectzAsyncBaseProvider.disconnect   rm   r`   r   _ws_reader_writerF)r2   N)-__name__
__module____qualname__logging	getLoggerr'   Logger__annotations__r)   r   r   r   r   r   r   is_asynchas_persistent_connectionr*   boolr,   intr-   r.   r   r
   r   r	   r   r   r   r@   propertyrF   r   rP   r   rX   rN   rR   rf   rl   ro   r7   StreamReaderStreamWriter rA   r?   r&   r&   L   s/   .W..5FGNN 
 	 j#oiS+8M.N)N OO  H %%)d)#$S$!&$&>B;B (-/3  $  , -513=>-
	 
. 8d 8 8,(,<K,	#yc;!677	8,"2(2<K2	#yc5k1BK1O+P!PQQ	R2&J Jc Jk JJU;#345J	tK +-	.J
J J$ J
 +*00""


 
#" g**++g**++rA   r&   c                        e Zd Zdeddf fdZddededefdZedede	fd	       Z
dedede	fd
Zede	defd       ZddedefdZdeeeef      de	fdZdee   de	fdZ xZS )AsyncJSONBaseProviderkwargsr2   Nc                 V    t        |   di | t        j                         | _        y )Nr   )superr@   	itertoolscountrequest_counter)r>   r   	__class__s     r?   r@   zAsyncJSONBaseProvider.__init__   s"    "6"(0rA   rY   rZ   c                 b    t        | j                        }|d||xs g d}t        t        |      S )N2.0)idjsonrpcrY   rZ   )nextr   r   r   )r>   rY   rZ   
request_idrpc_dicts        r?   form_requestz"AsyncJSONBaseProvider.form_request   s8    $../
l	
 J))rA   r   c                     t               j                  t        t        t        t
        f   |       t              }t        |      S )N)cls)text)r   json_encoder   r   strr   r   r   )r   encodeds     r?   encode_rpc_dictz%AsyncJSONBaseProvider.encode_rpc_dict   s;    #%11c3h* 2 
 W%%rA   c                 H    | j                  ||      }| j                  |      S rC   )r   r   )r>   rY   rZ   r   s       r?   encode_rpc_requestz(AsyncJSONBaseProvider.encode_rpc_request   s%    $$VV4##H--rA   raw_responsec                     t        t        |       st        |       n|       }t        t        t               j                  |            S rC   )r   r   r   r   r   r   json_decode)r   text_responses     r?   decode_rpc_responsez)AsyncJSONBaseProvider.decode_rpc_response   s;    )0)>GL!L
 K!2!4!@!@!OPPrA   rd   c                 <  K   	 | j                  t        d      g        d {   }d|v r|rt        d|       y|j                  d      dk(  ry	|rt        d
|       y7 ?# t        t        f$ r&}|rt        dt	        |       d|       Y d }~yd }~ww xY ww)Nweb3_clientVersionz+Problem connecting to provider with error: z: FerrorzError received from provider: r   r   TzBad jsonrpc version: )rN   r   OSErrorr   typerD   )r>   rd   responsees       r?   rf   z"AsyncJSONBaseProvider.is_connected   s     	!..{;O/PRTUUH h-4XJ?  <<	"e+-0EhZ.PQQ) V01 	-A$q'"QCP  	s=   BA$ A"A$ ;B"A$ $B3BBBBra   c                 D     ddj                   fd|D              z   dz   S )N   [s   , c              3   H   K   | ]  \  }}j                  ||        y wrC   )r   ).0rY   rZ   r>   s      r?   	<genexpr>zAAsyncJSONBaseProvider.encode_batch_rpc_request.<locals>.<genexpr>   s'      <JFF''7s   "   ]joinrc   s   ` r?   encode_batch_rpc_requestz.AsyncJSONBaseProvider.encode_batch_rpc_request   s5     jj NV  		
rA   request_dictsc                 D     ddj                   fd|D              z   dz   S )Nr      ,c              3   @   K   | ]  }j                  |        y wrC   )r   )r   dr>   s     r?   r   zCAsyncJSONBaseProvider.encode_batch_request_dicts.<locals>.<genexpr>  s     OA 4 4Q 7Os   r   r   )r>   r   s   ` r?   encode_batch_request_dictsz0AsyncJSONBaseProvider.encode_batch_request_dicts  s#    diiOOOORVVVrA   rC   rs   )rt   ru   rv   r   r@   r   r   r   staticmethodbytesr   r   r   r   r}   rf   r   r   r   r   __classcell__)r   s   @r?   r   r      s    1 1 1*; * *z * &* & & &. .c .e . Q% QK Q Q $ 4	
U;#345	
		
WZ8H WU WrA   r   )7r7   r:   r   rw   typingr   r   r   r   r   r   r	   r
   r   r   r   	eth_utilsr   r   r   web3._utils.cachingr   web3._utils.emptyr   r   web3._utils.encodingr   r   web3.exceptionsr   web3.middlewarer   web3.middleware.baser   r   
web3.typesr   r   r   
web3.utilsr   r   websockets.legacy.clientr   web3r    r!   web3._utils.batchingr"   web3.providers.persistentr#   web3.utils.ccip_url_validationr$   r&   r   r   rA   r?   <module>r      s            

 
o, o,dGW- GWrA   