
    (i                     @   d dl mZmZmZmZ d dlmZmZmZm	Z	m
Z
 d dl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mZ d dlmZ d d	lmZmZmZmZ erd d
l m!Z!m"Z" dZ# ee	      Z$ ee
e      Z%ede&de&de&fd       Z'dedefdZ(dedefdZ)de&dedef   fdZ*de(iZ+ ee$ ee+            Z,ejZ                  ej\                  ej^                  ej`                  gZ1de&dedef   fdZ2deeef   defdZ3dddedefdZ4dddedefd Z5 ejl                  e4e5!      Z7y")#    )TYPE_CHECKINGAnyCallableDict)apply_formatter_at_indexapply_formatter_ifapply_formatters_to_dictis_null	is_string)
complementcomposecurrydissoc)HexBytes)hex_to_integer)RPC)ExtraDataLengthErrorWeb3ValidationError)FormattingMiddlewareBuilder)
FormattersFormattersDictRPCEndpointTxParams)	AsyncWeb3Web3    web3_chain_idchain_idreturnc                 H    t        |      }|| k(  r|S t        d|d|       )Nz"The transaction declared chain ID z, but the connected node is on )to_integer_if_hexr   )r   r   chain_id_ints      K/var/www/br/venv/lib/python3.12/site-packages/web3/middleware/validation.py_validate_chain_idr$   9   s?    $X.L}$!00@ A,,9+<>
 	
    valc                     t        | t        t        t        f      s| S t	        |       }t        |      t        kD  r!t        dt        |       dt         d|      | S )NzThe field extraData is z bytes, but should be z. It is quite likely that you are connected to a POA chain. Refer to http://web3py.readthedocs.io/en/stable/middleware.html#proof-of-authority for more details. The full extraData is: )
isinstancestrintbytesr   lenMAX_EXTRADATA_LENGTHr   )r&   results     r#   _check_extradata_lengthr/   E   sh    cCe,-
c]F
6{))"%c&k]2H#$ %8 9?z	C
 	
 Jr%   transactionc                     t        | d      S )NchainId)r   )r0   s    r#   _transaction_normalizerr3   T   s    +y))r%   .c                 b     dt         fdt                     i}t        t        |      d      S )Nr2   c                     t              S N)is_not_null)_r   s    r#   <lambda>z._transaction_param_validator.<locals>.<lambda>\   s    k-0 r%   r   )r   r$   r   r	   )r   transactions_params_validatorss   ` r#   _transaction_param_validatorr;   X   s;    %0}-
&" $ !?@! r%   	extraDatac                 H    t        t        t        d      t        |             S )Nr   )r   r   r3   r;   )r   s    r#   _chain_id_validatorr>   t   s"     !8!<$]3 r%   request_formattersc                 l    t        | t        j                  t        t        j                  t        i      S )N)r?   result_formatters)dictr   eth_getBlockByHashblock_validatoreth_getBlockByNumber)r?   s    r#   _build_formatters_dictrF   {   s/     -""O$$o
 r%   w3r   methodc                     i }t        |      t        v r/| j                  j                  }t        D ]  }t	        |      ||<    t        |      S r6   r   METHODS_TO_VALIDATEethr   r>   rF   )rG   rH   r?   w3_chain_ids       r#   build_method_validatorsrN      sR    611ffoo) 	JF)<[)Iv&	J ""455r%   async_w3zAsyncWeb3[Any]c                    K   i }t        |      t        v r7| j                  j                   d {   }t        D ]  }t	        |      ||<    t        |      S 7 (wr6   rJ   )rO   rH   r?   rM   s       r#   async_build_method_validatorsrQ      sb      &(611$LL111) 	JF)<[)Iv&	J ""455	 2s   -AA)A)sync_formatters_builderasync_formatters_builderN)8typingr   r   r   r   eth_utils.curriedr   r   r	   r
   r   eth_utils.toolzr   r   r   r   hexbytesr   web3._utils.formattersr   web3._utils.rpc_abir   web3.exceptionsr   r   web3.middleware.formattingr   
web3.typesr   r   r   r   web3r   r   r-   r7   r!   r*   r$   r/   r3   r;   BLOCK_VALIDATORSrD   eth_sendTransactioneth_estimateGaseth_calleth_createAccessListrK   r>   rF   rN   rQ   buildValidationMiddleware r%   r#   <module>rf      s       
  !&y.A  
c 
S 
S 
 
  * *h *
 
c8J 
 (  %)*:;
 LL	 s xS/A 	[#-.		6 6 6 6	6	6(3	6	6 92883: r%   