o
    èó·iY  ã                   @   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ÚuserZhttp_optionsÚhttp)Úrequest_kwargsZinfuraÚkeyzhttps://{}.infura.io/v3/{}ÚnetworkZrinkebyr   )Úgeth_poa_middleware)ZlayerZ
cloudflareZzksyncz$invalid blockchain gateway type "{}")Úweb3ÚWeb3ÚgetZHTTPProviderÚformatZweb3.middlewarer   Zmiddleware_onionZinjectÚNotImplementedErrorÚRuntimeError)Zgateway_configÚw3r   Z
project_idZhttp_urlr   © r   úXC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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
   ,r(   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   r$   r   r   r   r   r   r   r   Úunpack_uint256h   s   &r*   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 {}r#   r)   s                                    )r   r$   r   r   r   r%   r   r&   r   r   r   Úpack_uint256s   s
   6r,   Fr'   Ú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   é   é   é   )Zw0Zw1Zw2r   Zw4)r   ÚstrÚ
startswithr   r   r   r   ÚrangeÚappendÚstructÚunpack)r'   r-   Zvalue_bytesÚwÚiÚpacked_valuer   r   r   Úpack_ethadr}   s    

0$þr?   r>   c              
   C   sž   g }t | ƒtkrtdƒD ],}| t d| d |¡ ¡¡ qt | ƒtkr5tdƒD ]}| t d| | ¡¡ q'J dƒ‚|rJtj	 
dtd |¡ƒ ¡  ¡S d |¡S )	zC

    :param packed_value:
    :param return_str:
    :return:
    r1   r2   zw{}Fzshould not arrive herer/   ó    N)r   Údictr8   r9   r:   Úpackr   Úlistr   r   ZtoChecksumAddressr   ÚjoinÚdecode)r>   Z
return_strr<   r=   r   r   r   Úunpack_ethadr›   s   
rF   )N)F)r:   Úbinasciir   r   Útypingr   r   r   r   r   r    r(   r*   r,   r   r6   Úboolr$   r?   rF   r   r   r   r   Ú<module>   s   
1
4
4