o
    >hY                     @   s   d dl Z d dlmZmZ d dlmZmZmZ d dlZdddZ	dd Z
dd	 Zd
d Zdd Zddeeef dedeee eeef f fddZddeee eeef f deeef fddZdS )    N)a2b_hexb2a_hex)UnionDictListc                 C   s  | du s
| d dkrt  }|S | d dkr+| di }t t jj| d |d}|S | d dkrf| di }| d	 }d
| d |}t t jj||d}| dddkrdddlm} |jj|dd |S | d dkrot	 | d dkrxt	 t
d| d )z
    Create a Web3 instance configured and ready-to-use gateway to the blockchain.

    :param gateway_config: Blockchain gateway configuration.
    :type gateway_config: dict

    :return: Configured Web3 instance.
    :rtype: :class:`web3.Web3`
    Ntypeautouserhttp_optionshttp)request_kwargsinfurakeyzhttps://{}.infura.io/v3/{}networkrinkebyr   )geth_poa_middleware)layer
cloudflarezksyncz$invalid blockchain gateway type "{}")web3Web3getHTTPProviderformatweb3.middlewarer   middleware_onioninjectNotImplementedErrorRuntimeError)gateway_configw3r   
project_idhttp_urlr    r#   r/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/autobahn/xbr/_util.pymake_w3"   s*   
#r%   c                 C   sh   | d u st | tksJ dt | | r*t | tkr*t| dks*J dt| | r2tj| S dS )Ndata must by bytes, was {}   z)data must be bytes[16], but was bytes[{}]r   )r   bytesr   lenr   r   toIntdatar#   r#   r$   unpack_uint128S   s   &r-   c                 C   sT   | d u st | tkr| dkr| dd k sJ | r(tj| }ddt|  | S dS )Nr             r'   s                   )r   intr   r   toBytesr)   valuer,   r#   r#   r$   pack_uint128^   s
   ,r5   c                 C   sl   | d u st | tksJ dt | | r*t | tkr*t| dks*J dt| | r4ttj| S dS )Nr&       z)data must be bytes[32], but was bytes[{}]r   )r   r(   r   r)   r1   r   r   r*   r+   r#   r#   r$   unpack_uint256h   s   &r7   c                 C   s^   | d u st | tkr| dkr| dd k sJ d| | r-tj| }ddt|  | S dS )Nr   r.      z!value must be uint256, but was {}r0   r6   s                                    )r   r1   r   r   r   r2   r)   r3   r#   r#   r$   pack_uint256s   s
   6r9   Fr4   return_dictreturnc                 C   s   t | tkr| drt| dd }nt| }nt | tkr"| }n	J dt | t|dks3J g }tdD ]}|t	
d|d	|d
  d
|d
   d	  q9|ri|d	 |d |d |d |d
 d}|S |}|S )z=

    :param value:
    :param return_dict:
    :return:
    0xr.   NFzinvalid type {} for value      <Ir            )w0w1w2r    w4)r   str
startswithr   r(   r   r)   rangeappendstructunpack)r4   r:   value_byteswipacked_valuer#   r#   r$   pack_ethadr}   s    

0$rQ   rP   c              
   C   s   g }t | tkrtdD ]}|td| d|  qnt | tkr7tdD ]}|td| |  q(nJ d|rLtj	
dtd|  S d|S )zC

    :param packed_value:
    :param return_str:
    :return:
    r>   r?   zw{}Fzshould not arrive herer<       )r   dictrI   rJ   rK   packr   listr   r   toChecksumAddressr   joindecode)rP   
return_strrN   rO   r#   r#   r$   unpack_ethadr   s   
rZ   )N)F)rK   binasciir   r   typingr   r   r   r   r%   r-   r5   r7   r9   r(   rG   boolr1   rQ   rZ   r#   r#   r#   r$   <module>   s   
1
4
4