o
    >h                     @   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)txaiomake_loggerlog_gateway_w3backgroundCaller)selfgateway r   x/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/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
   web3Web3HTTPProvider	web3.autor   isConnectedformatr	   warnRuntimeErrorprintversionnetworkr   setProvider)r   r   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 )N*0x0000000000000000000000000000000000000000owner)r   
xbrnetwork	functionsgetMarketOwnercall)
_market_idr&   r   r   r   _get_market_statush   s
   z>SimpleBlockchain.get_market_status.<locals>._get_market_statusr   )r   	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statusACTIVECLOSED)	r   r'   r(   getDomainStatusr*   r   DomainStatus_NULLDomainStatus_ACTIVEDomainStatus_CLOSED)
_domain_idr0   r   r   r   _get_domain_status{   s   


z>SimpleBlockchain.get_domain_status.<locals>._get_domain_statusr-   )r   	domain_idr8   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
        NotImplementedErrorr   delegate_adrr   r   r   get_node_status      	z SimpleBlockchain.get_node_statusc                 C   r;   r<   r=   r?   r   r   r   get_actor_status   rB   z!SimpleBlockchain.get_actor_statusc                 C   r;   r<   r=   r?   r   r   r   get_delegate_status   rB   z$SimpleBlockchain.get_delegate_statusc                 C   r;   )zn

        :param channel_adr:
        :type channel_adr: bytes

        :return:
        :rtype: dict
        r=   )r   channel_adrr   r   r   get_channel_status   rB   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(   getMemberLevelr*   getMemberEulastripgetMemberProfile)_member_adrlevelrI   rJ   
member_adrr   r   _get_member_status   s   z>SimpleBlockchain.get_member_status.<locals>._get_member_statustypebyteslenr   )r   rR   rS   r   rQ   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
        rG   c                    s*    j j| }tjj|  }||dS )N)ETHXBR)r   eth
getBalancer   xbrtokenr(   	balanceOfr*   )_adrbalance_ethbalance_xbrr"   r   r   _get_balances   s
   z4SimpleBlockchain.get_balances.<locals>._get_balancesrT   )r   account_adrrb   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
        )XBRToken
XBRNetwork)r   r]   addressr'   r"   r   r   r   get_contract_adrs   s   	z"SimpleBlockchain.get_contract_adrs)N)__name__
__module____qualname____doc__r4   r5   r6   NodeType_NULLNodeType_MASTERNodeType_CORENodeType_EDGENodeLicense_NULLNodeLicense_INFINITENodeLicense_FREEr	   r   r   r!   r#   r/   r:   rA   rC   rD   rF   rX   rd   rh   r   r   r   r   r       s4    
r   )r   r   autobahnr   objectr   r   r   r   r   <module>   s   