U
    •uÄc�  ã                   @   s0   d dl Z d dlZd dlmZ G dd„ deƒZdS )é    N)Úxbrc                   @   s¢   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZddd„Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚSimpleBlockchainz0
    Simple Ethereum blockchain XBR client.
    r   é   é   é   Nc                 C   s(   t  ¡ | _|| _d| _| jdk	s$t‚dS )z³

        :param gateway: Optional explicit Ethereum gateway URL to use.
            If no explicit gateway is specified, let web3 auto-choose.
        :type gateway: str
        N)ÚtxaioZmake_loggerÚlogÚ_gatewayÚ_w3ÚbackgroundCallerÚAssertionError)ÚselfZgateway© r   úZ/var/www/html/NKSPORTS/school/venv/lib/python3.8/site-packages/autobahn/xbr/_blockchain.pyÚ__init__4   s    
zSimpleBlockchain.__init__c                 C   s”   | j dkst‚| jr*t tj | j¡¡}nddlm} | ¡ sdd 	| jpJd¡}| j
 |¡ t|ƒ‚ntd 	|jj| jpxd¡ƒ || _ t | j ¡ dS )zV
        Start the blockchain client using the configured blockchain gateway.
        Nr   )Úw3z)could not connect to Web3/Ethereum at: {}Úautoz(connected to network {} at provider "{}")r
   r   r	   Úweb3ZWeb3ZHTTPProviderZ	web3.autor   ZisConnectedÚformatr   ÚwarnÚRuntimeErrorÚprintÚversionÚnetworkr   ZsetProvider)r   r   Zemsgr   r   r   Ústart@   s    
ÿzSimpleBlockchain.startc                 C   s   | j dk	st‚d| _ dS )z-
        Stop the blockchain client.
        N)r
   r   ©r   r   r   r   ÚstopZ   s    zSimpleBlockchain.stopc                 Ã   s   dd„ }|   ||¡S )z5

        :param market_id:
        :return:
        c                 S   s.   t jj | ¡ ¡ }|r|dkr"d S d|iS d S )NZ*0x0000000000000000000000000000000000000000Úowner)r   Ú
xbrnetworkÚ	functionsZgetMarketOwnerÚcall)Z
_market_idr   r   r   r   Ú_get_market_statush   s     ÿz>SimpleBlockchain.get_market_status.<locals>._get_market_status©r   )r   Z	market_idr!   r   r   r   Úget_market_statusb   s    z"SimpleBlockchain.get_market_statusc                 Ã   s   dd„ }|   ||¡S )zj

        :param domain_id:
        :type domain_id: bytes

        :return:
        :rtype: dict
        c                 S   sH   t jj | ¡ ¡ }|tjkr d S |tjkr2ddiS |tjkrDddiS d S )NÚstatusZACTIVEZCLOSED)	r   r   r   ZgetDomainStatusr    r   ÚDomainStatus_NULLÚDomainStatus_ACTIVEÚDomainStatus_CLOSED)Z
_domain_idr$   r   r   r   Ú_get_domain_status{   s    


z>SimpleBlockchain.get_domain_status.<locals>._get_domain_statusr"   )r   Z	domain_idr(   r   r   r   Úget_domain_statusr   s    	z"SimpleBlockchain.get_domain_statusc                 C   s
   t ƒ ‚dS ©zp

        :param delegate_adr:
        :type delegate_adr: bytes

        :return:
        :rtype: dict
        N©ÚNotImplementedError©r   Zdelegate_adrr   r   r   Úget_node_status…   s    	z SimpleBlockchain.get_node_statusc                 C   s
   t ƒ ‚dS r*   r+   r-   r   r   r   Úget_actor_status�   s    	z!SimpleBlockchain.get_actor_statusc                 C   s
   t ƒ ‚dS r*   r+   r-   r   r   r   Úget_delegate_status›   s    	z$SimpleBlockchain.get_delegate_statusc                 C   s
   t ƒ ‚dS )zn

        :param channel_adr:
        :type channel_adr: bytes

        :return:
        :rtype: dict
        Nr+   )r   Zchannel_adrr   r   r   Úget_channel_status¦   s    	z#SimpleBlockchain.get_channel_statusc                 ƒ   s4   t ˆ ƒtkrtˆ ƒdkst‚‡ fdd„}|  |ˆ ¡S )zl

        :param member_adr:
        :type member_adr: bytes

        :return:
        :rtype: dict
        é   c                    st   t jj ˆ ¡ ¡ }|sd S t jj ˆ ¡ ¡ }|r<| ¡ dkr@d S t jj ˆ ¡ ¡ }|rb| ¡ dkrfd }||dœS d S )NÚ )ÚeulaÚprofile)r   r   r   ZgetMemberLevelr    ZgetMemberEulaÚstripZgetMemberProfile)Z_member_adrÚlevelr4   r5   ©Ú
member_adrr   r   Ú_get_member_status¼   s    þz>SimpleBlockchain.get_member_status.<locals>._get_member_status©ÚtypeÚbytesÚlenr   r   )r   r9   r:   r   r8   r   Úget_member_status±   s    	z"SimpleBlockchain.get_member_statusc                 ƒ   s4   t |ƒtkrt|ƒdkst‚‡ fdd„}ˆ  ||¡S )aY  
        Return current ETH and XBR balances of account with given address.

        :param account_adr: Ethereum address of account to get balances for.
        :type account_adr: bytes

        :return: A dictionary with ``"ETH"`` and ``"XBR"`` keys and respective
            current on-chain balances as values.
        :rtype: dict
        r2   c                    s*   ˆ j j | ¡}tjj | ¡ ¡ }||dœS )N)ÚETHZXBR)r
   ÚethZ
getBalancer   Úxbrtokenr   Z	balanceOfr    )Z_adrZbalance_ethZbalance_xbrr   r   r   Ú_get_balancesÚ   s
    þz4SimpleBlockchain.get_balances.<locals>._get_balancesr;   )r   Zaccount_adrrC   r   r   r   Úget_balancesÍ   s    zSimpleBlockchain.get_balancesc                 C   s   t jjt jjdœS )zÍ
        Get XBR smart contract addresses.

        :return: A dictionary with ``"XBRToken"``  and ``"XBRNetwork"`` keys and Ethereum
            contract addresses as values.
        :rtype: dict
        )ZXBRTokenZ
XBRNetwork)r   rB   Úaddressr   r   r   r   r   Úget_contract_adrsã   s    	þz"SimpleBlockchain.get_contract_adrs)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r&   r'   ZNodeType_NULLZNodeType_MASTERZNodeType_COREZNodeType_EDGEZNodeLicense_NULLZNodeLicense_INFINITEZNodeLicense_FREEr   r   r   r   r   r#   r)   r.   r/   r0   r1   r?   rD   rF   r   r   r   r   r       s2   
r   )r   r   Úautobahnr   Úobjectr   r   r   r   r   Ú<module>   s   