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/{}Z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   úQ/var/www/html/VBACK/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:
    r1   r2   zw{}Fzshould not arrive herer/   ó    N)r   Údictr8   r9   r:   Úpackr   Úlistr   r   r   ZtoChecksumAddressr   ÚjoinÚdecode)r>   Z
return_strr<   r=   r   r   r   Úunpack_ethadr›   s     rF   )N)F)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

0