U
    •uÄcY  ã                   @   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eeef eeee eeef f dœdd„Zdeee eeef f eeef dœdd„ZdS )é    N)Úa2b_hexÚb2a_hex)ÚUnionÚDictÚListc                 C   s  | dks| d dkrt  ¡ }nâ| d dkrR|  di ¡}t  t jj| d |d�¡}n®| d dkrÆ|  di ¡}| d	 }d
 | d |¡}t  t jj||d�¡}|  dd¡dkrÄddlm} |jj|dd� n:| d dkrÚt	ƒ ‚n&| d dkrît	ƒ ‚nt
d | d ¡ƒ‚|S )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   úR/var/www/html/SARATH/school/venv/lib/python3.8/site-packages/autobahn/xbr/_util.pyÚmake_w3"   s&    

r   c                 C   sl   | d ks&t | ƒtks&td t | ƒ¡ƒ‚| rTt | ƒtkrTt| ƒdksTtd t| ƒ¡ƒ‚| rdtj | ¡S dS d S )Núdata must by bytes, was {}é   z)data must be bytes[16], but was bytes[{}]r   )r   ÚbytesÚAssertionErrorr   Úlenr   r   ÚtoInt©Údatar   r   r   Úunpack_uint128S   s    &r!   c                 C   sX   | d ks,t | ƒtkr(| dkr(| dd k s,t‚| rPtj | ¡}ddt|ƒ  | S dS d S )Nr   é   é€   ó    r   s                   )r   Úintr   r   r   ÚtoBytesr   ©Úvaluer    r   r   r   Úpack_uint128^   s
    ,r)   c                 C   sp   | d ks&t | ƒtks&td t | ƒ¡ƒ‚| rTt | ƒtkrTt| ƒdksTtd t| ƒ¡ƒ‚| rhttj | ¡ƒS d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   r   Úunpack_uint256h   s    &r+   c                 C   sb   | d ks6t | ƒtkr(| dkr(| dd k s6td | ¡ƒ‚| rZtj | ¡}ddt|ƒ  | S d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   r   Úpack_uint256s   s
    6r-   F)r(   Úreturn_dictÚreturnc                 C   sÜ   t | ƒtkr2|  d¡r(t| dd… ƒ}qZt| ƒ}n(t | ƒtkrD| }ndsZtd t | ƒ¡ƒ‚t|ƒdksjt‚g }tdƒD ]2}| 	t
 d|d	|d
  d
|d
  … ¡d	 ¡ qv|rÔ|d	 |d |d |d |d
 dœ}n|}|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   r   ÚrangeÚappendÚstructÚunpack)r(   r.   Zvalue_bytesÚwÚiÚpacked_valuer   r   r   Úpack_ethadr}   s    

0&r@   )r?   r/   c              
   C   sª   g }t | ƒtkr<tdƒD ] }| t d| d |¡ ¡¡ qn>t | ƒtkrntdƒD ]}| t d| | ¡¡ qPndsztdƒ‚|rœt	j
 dtd |¡ƒ ¡  ¡S d |¡S dS )	zC

    :param packed_value:
    :param return_str:
    :return:
    r2   r3   zw{}Fzshould not arrive herer0   ó    N)r   Údictr9   r:   r;   Úpackr   Úlistr   r   r   ZtoChecksumAddressr   ÚjoinÚdecode)r?   Z
return_strr=   r>   r   r   r   Úunpack_ethadr›   s     rG   )N)F)F)r;   Úbinasciir   r   Útypingr   r   r   r   r   r!   r)   r+   r-   r   r7   Úboolr%   r@   rG   r   r   r   r   Ú<module>   s   
1

0