
    (i                         d dl mZmZmZ d dlmZ d dlmZ d dl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mZmZ 	 	 dd
eeef   dededee   def
dZy)    )AnyDictOptional)abi)URIN)DEFAULT_HTTP_TIMEOUT)to_bytes_if_hexto_hex_if_bytes)MultipleFailedRequestsWeb3ValidationError)TxParams)CcipUrlValidatorvalidate_ccip_url_hostvalidate_ccip_url_schemeoffchain_lookup_payloadtransaction
allow_httpurl_validatorreturnc                 &   t        | d         j                         }t        | d         j                         }|t        |d         j                         k7  rt        d      t        j                         }| d   D ]h  }t        t        |      j                  dt        |            j                  dt        |                  }	 t        ||       t        |       | ||       	 d|v rd|v r|j                  |t        d	
      }	n|j                  |||dt        d	      }	d|	j                  cxk  rdk  rn n|	j                          d|	j                  cxk  rdk  sn |	j!                         }
d|
j#                         vrt        d      dj%                  t'        | d         t)        j*                  ddgt'        |
d         t'        | d         g      g      }|c S  t-        d      # t        $ r Y w xY w# t        $ r Y w xY w)NsendercallDatatoz{Cannot handle OffchainLookup raised inside nested call. Returned `sender` value does not equal `to` address in transaction.urlsz{sender}z{data})r   F)timeoutallow_redirects)datar   )jsonr   r   i  i     i+  r   zVImproperly formatted response for offchain lookup HTTP request - missing 'data' field.    callbackFunctionbytes	extraDataz)Offchain lookup failed for supplied urls.)r
   lowerr   requestsSessionr   strreplacer   r   getr   post	Exceptionstatus_coderaise_for_statusr   keysjoinr	   r   encoder   )r   r   r   r   formatted_senderformatted_datasessionurlformatted_urlresponseresult#encoded_data_with_function_selectors               N/var/www/br/venv/lib/python3.12/site-packages/web3/utils/exception_handling.pyhandle_offchain_lookupr:   $   s4    ''>x'HIOOQ$%<Z%HIOOQN?;t+<=CCEE!R
 	

  G&v. >3HWZ%5!67WXs>23
	$]zJ"=1(m,	3:#4";;!0$) '  #<<!"0<LM0$)	 (  8''.3.%%'h**1c1&%+ 
 /2hh   78J KL

g&'v7'(?(LM	/
+ 32}>3~ !!L
MMg # 		"  		s$   "G3*=H3	H ?H 	HH)FN)typingr   r   r   eth_abir   
eth_typingr   r%   web3._utils.httpr   web3._utils.type_conversionr	   r
   web3.exceptionsr   r   
web3.typesr   web3.utils.ccip_url_validationr   r   r   r'   boolr"   r:    r    r9   <module>rE      s       04	ON!#s(^ONON ON ,-	ON
 ONr    