
    (i                     &   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 d dl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" d dl#m$Z$m%Z% erd dl&m'Z' d dl(m)Z) d dl*m+Z+  G d d      Z, G d de,      Z-y)    N)	TYPE_CHECKINGAnyCallableListOptionalSetTupleUnioncast)to_bytesto_text)CACHEABLE_REQUESTS)Emptyempty)FriendlyJsonSerdeWeb3JsonEncoder)ProviderConnectionError)combine_middleware)
MiddlewareMiddlewareOnion)RPCEndpointRPCResponse)RequestCacheValidationThresholdSimpleCache)Web3)RequestBatcher)CcipUrlValidatorc                   N   e Zd ZU  ej                  d      Zej                  ed<   dZe	e	e
df   ede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f   fdZ dede!defdZ"ddedefdZ#y)BaseProviderz web3.providers.base.BaseProviderloggerNN._request_func_cacheFTglobal_ccip_read_enabled   ccip_read_max_redirectsccip_read_allow_httpNzCcipUrlValidator | 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	threadingLock_request_cache_lockr(   r   r)   r*   contextvars
ContextVar_batching_context_batch_request_func_cache)selfr(   r)   r*   s       D/var/www/br/venv/lib/python3.12/site-packages/web3/providers/base.py__init__zBaseProvider.__init__N   sf     *$/3<>>3C &<#"4"J8J2T/ ""#5tD 	
  	&    c                 :    | j                   j                         duS )zG
        Check if the provider is currently batching requests.
        N)r5   get)r7   s    r8   _is_batchingzBaseProvider._is_batchingd   s    
 %%))+477r:   w3r   middleware_onionc                     |j                         }| j                  d   }||k7  r|t        ||| j                        f| _        | j                  d   S )z
        @param w3 is the web3 instance
        @param middleware_onion is an iterable of middleware,
            ordered by first to execute
        @returns a function that calls all the middleware and
            eventually self.make_request()
        r   )
middlewarer>   provider_request_fn)as_tuple_of_middlewarer"   r   make_request)r7   r>   r?   rA   	cache_keys        r8   request_funczBaseProvider.request_funck   sa     .>-T-T-V
,,Q/	
"")(,(9(9(D$ ''++r:   methodparamsc                     t        d      Nz$Providers must implement this methodNotImplementedError)r7   rH   rI   s      r8   rE   zBaseProvider.make_request       !"HIIr:   show_tracebackc                     t        d      rK   rL   )r7   rO   s     r8   is_connectedzBaseProvider.is_connected   rN   r:   F)$__name__
__module____qualname__logging	getLoggerr    Logger__annotations__r"   r	   r   r   r   is_asynchas_persistent_connectionr#   boolr%   intr&   r'   r   r   r   r   r
   r   r   r9   propertyr=   r   rG   r   rE   rQ    r:   r8   r   r   >   sM   .W../QRFGNNRVuZ_5x[@P7QQR 
 H %%)d)#$S$!&$&9=6= (-/3  $  , -513=>-
	 
, 8d 8 8,,,;,	#{"	#,2J; J J JJ4 JD Jr:   r   c            
       
    e Zd Z ej                  d      Zdeddf 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ddededeee   ef   f   fdZdeeeef      de	fdZdeeeef      deee   ef   fdZ xZS )JSONBaseProviderz$web3.providers.base.JSONBaseProviderkwargsr+   Nc                 V    t        |   di | t        j                         | _        y )Nr_   )superr9   	itertoolscountrequest_counter)r7   rb   	__class__s     r8   r9   zJSONBaseProvider.__init__   s"    "6"(0r:   rH   rI   c                     d||xs g t        | j                        d}t               j                  |t              }t        |      S )N2.0)jsonrpcrH   rI   id)text)nextrg   r   json_encoder   r   )r7   rH   rI   rpc_dictencodeds        r8   encode_rpc_requestz#JSONBaseProvider.encode_rpc_request   sF    lt++,	
 $%11(OLW%%r:   raw_responsec                 f    t        |       }t        t        t               j	                  |            S N)r   r   r   r   json_decode)rs   text_responses     r8   decode_rpc_responsez$JSONBaseProvider.decode_rpc_response   s(    -K!2!4!@!@!OPPr:   rO   c                     	 | j                  t        d      g       }d|v r|rt        d|       y|d   dk(  ry	|rt        d
|       y# t        $ r&}|rt        dt	        |       d|       Y d }~yd }~ww xY w)Nweb3_clientVersionz+Problem connecting to provider with error: z: FerrorzError received from provider: rk   rj   TzBad jsonrpc version: )rE   r   OSErrorr   type)r7   rO   responsees       r8   rQ   zJSONBaseProvider.is_connected   s    	((5I)JBOH h-4XJ?  I%'-0EhZ.PQQ'  	-A$q'"QCP  	s   A 	A;A66A;r>   r   r?   .c                     |j                         }| j                  d   }||k7  r>| j                  }t        |      D ]  } ||      }|j	                  |      } ||f| _        | j                  d   S )Nr   rC   )rD   r6   make_batch_requestreversedwrap_make_batch_request)r7   r>   r?   rA   rF   accumulator_fnmwinitializeds           r8   batch_request_funcz#JSONBaseProvider.batch_request_func   s     .>-T-T-V
2215	
"!44Nz*  f "-!D!D"" /9.-ID*--b11r:   requestsc                 D     ddj                   fd|D              z   dz   S )N   [s   , c              3   H   K   | ]  \  }}j                  ||        y wru   )rr   ).0rH   rI   r7   s      r8   	<genexpr>z<JSONBaseProvider.encode_batch_rpc_request.<locals>.<genexpr>   s'      <JFF''7s   "   ])joinr7   r   s   ` r8   encode_batch_rpc_requestz)JSONBaseProvider.encode_batch_rpc_request   s5     jj NV  		
r:   c                     t        d      rK   rL   r   s     r8   r   z#JSONBaseProvider.make_batch_request   s     ""HIIr:   rR   )rS   rT   rU   rV   rW   r    r   r9   r   bytesrr   staticmethodr   rx   r\   rQ   r   r   r
   r   r   r	   r   r   __classcell__)rh   s   @r8   ra   ra      s   WEFF1 1 1& &c &e & Q% QK Q Q4 D 422,;2	#uT+.;<<	=2(	
U;#345	
		
JU;#345J	tK +-	.Jr:   ra   ).r3   re   rV   r0   typingr   r   r   r   r   r   r	   r
   r   	eth_utilsr   r   web3._utils.cachingr   web3._utils.emptyr   r   web3._utils.encodingr   r   web3.exceptionsr   web3.middlewarer   web3.middleware.baser   r   
web3.typesr   r   
web3.utilsr   r   web3r   web3._utils.batchingr   web3.utils.ccip_url_validationr   r   ra   r_   r:   r8   <module>r      s~       
 
 


 
JJ JJZRJ| RJr:   