o
    èó·i�  ã                   @   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usJ ‚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)ÚselfZgateway© r   ú^C:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\autobahn/xbr/_blockchain.pyÚ__init__4   s   
zSimpleBlockchain.__init__c                 C   s’   | j du sJ ‚| jrt tj | j¡¡}nddlm} | ¡ s1d | jp%d¡}| j	 
|¡ t|ƒ‚td |jj| jp;d¡ƒ || _ 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	   Ú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usJ ‚d| _ dS )z-
        Stop the blockchain client.
        N)r
   ©r   r   r   r   ÚstopZ   s   
zSimpleBlockchain.stopc                 Ã   ó   �dd„ }|   ||¡S )z5

        :param market_id:
        :return:
        c                 S   s*   t jj | ¡ ¡ }|r|dkrd S d|i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_statusN©r   )r   Z	market_idr!   r   r   r   Úget_market_statusb   s   €z"SimpleBlockchain.get_market_statusc                 Ã   r   )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rddiS |tjkr"d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_statusNr"   )r   Z	domain_idr(   r   r   r   Úget_domain_statusr   s   €	z"SimpleBlockchain.get_domain_statusc                 C   ó   t ƒ ‚©zp

        :param delegate_adr:
        :type delegate_adr: bytes

        :return:
        :rtype: dict
        N©ÚNotImplementedError©r   Zdelegate_adrr   r   r   Úget_node_status…   ó   	z SimpleBlockchain.get_node_statusc                 C   r*   r+   r,   r.   r   r   r   Úget_actor_status�   r0   z!SimpleBlockchain.get_actor_statusc                 C   r*   r+   r,   r.   r   r   r   Úget_delegate_status›   r0   z$SimpleBlockchain.get_delegate_statusc                 C   r*   )zn

        :param channel_adr:
        :type channel_adr: bytes

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

        :param member_adr:
        :type member_adr: bytes

        :return:
        :rtype: dict
        é   c                    sp   t jj ˆ ¡ ¡ }|sd S t jj ˆ ¡ ¡ }|r| ¡ dkr d S t jj ˆ ¡ ¡ }|r1| ¡ dkr3d }||dœS )NÚ )ÚeulaÚprofile)r   r   r   ZgetMemberLevelr    ZgetMemberEulaÚstripZgetMemberProfile)Z_member_adrÚlevelr6   r7   ©Ú
member_adrr   r   Ú_get_member_status¼   s   þz>SimpleBlockchain.get_member_status.<locals>._get_member_statusN©ÚtypeÚbytesÚlenr   )r   r;   r<   r   r:   r   Úget_member_status±   s   €	z"SimpleBlockchain.get_member_statusc                 ƒ   s6   �t |ƒtkrt|ƒdksJ ‚‡ 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
        r4   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_balancesNr=   )r   Zaccount_adrrE   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
XBRNetworkN)r   rD   Ú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/   r1   r2   r3   rA   rF   rH   r   r   r   r   r       s4    
r   )r   r   Zautobahnr   Úobjectr   r   r   r   r   Ú<module>   s   