o
    >hM=                     @   s   d dl Z d dlmZ d dlmZmZmZmZ d dlZd dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZmZ G dd deZG dd deZdS )    N)b2a_hex)OptionalDictAnyList)Contract)ENS)DeferredinlineCallbacks)deferToThread)ICryptosignKeyIEthereumKey)identify_realm_name_category)make_w3EIP712AuthorityCertificatec                   @   s  e Zd ZdZdZ							d1dddee dee dee d	ee d
ee dee dee fddZe	dede
dede
dede
de
de
de
de
defddZe		d2dedededee
 dee defdd Zed3d!d"Zedee fd#d$Zedee fd%d&Zedee fd'd(Zedee fd)d*Zedee fd+d,Zedee fd-d.Zedee fd/d0ZdS )4Seederz

    _frealm	_operator_label_country_legal	_endpoint_bandwidth_requested_bandwidth_offeredNfrealmFederatedRealmoperatorlabelcountrylegalendpointbandwidth_requestedbandwidth_offeredc	           	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _dS )z

        :param frealm:
        :param operator:
        :param label:
        :param country:
        :param legal:
        :param endpoint:
        :param bandwidth_requested:
        :param bandwidth_offered:
        Nr   )	selfr   r   r   r   r    r!   r"   r#    r%   t/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/autobahn/xbr/_frealm.py__init__:   s   
zSeeder.__init__chain_idverifying_contractchannel_binding
channel_idblock_no	challengepubkeyrealmdelegateseeder	bandwidthc                 C   s  |pd}|pd}| sJ |sJ |d usJ |d usJ |s J |s$J |s(J |s,J |s0J |
s4J ddddddgdddd	d
dddddddddddddddddd
ddd
ddd
ddddgddddd| |||||||||	|
dd}|S )N     namestring)r5   typeversionchainIduint256verifyingContractaddressr*   r+   bytes32r,   r-   r.   r/   r0   r1   r2   uint32)EIP712DomainEIP712SeederConnectr@   XBR1)r5   r8   )r9   r;   r*   r+   r,   r-   r.   r/   r0   r1   r2   )typesprimaryTypedomainmessager%   )r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   datar%   r%   r&   _create_eip712_connectX   s   :OzSeeder._create_eip712_connect
client_keydelegate_keyreturnc                 c   s    d}d}d}t d}	tj||||||	|jddd|jddd|d	}
||
V }|jdd|	||d
|||jdd| j|t|	 d}|S )z

        :param client_key:
        :param delegate_key:
        :param bandwidth_requested:
        :param channel_id:
        :param channel_binding:
        :return:
           s       T)binarys   Fs   )r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   (7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f)r.   r-   r*   r+   r/   r(   r,   r0   r1   r2   	signature)
osurandomr   rH   
public_keyr<   sign_typed_datar   r   decode)r$   rI   rJ   r"   r+   r*   r(   r)   r,   r-   eip712_datarP   	authextrar%   r%   r&   create_authextra   s>   





#zSeeder.create_authextrac                 C      | j S 

        :return:
        )r   r$   r%   r%   r&   r        zSeeder.frealmc                 C   rY   )z
        Operator address, e.g. ``"0xe59C7418403CF1D973485B36660728a5f4A8fF9c"``.

        :return: The Ethereum address of the endpoint operator.
        )r   r\   r%   r%   r&   r        zSeeder.operatorc                 C   rY   )z
        Operator endpoint label.

        :return: A human readable label for the operator or specific operator endpoint.
        )r   r\   r%   r%   r&   r     r^   zSeeder.labelc                 C   rY   )zz
        Operator country (ISO 3166-1 alpha-2), e.g. ``"US"``.

        :return: ISO 3166-1 alpha-2 country code.
        )r   r\   r%   r%   r&   r   &  r^   zSeeder.countryc                 C   rY   rZ   )r   r\   r%   r%   r&   r    /  r]   zSeeder.legalc                 C   rY   )a  
        Public WAMP endpoint of seeder. Secure WebSocket URL resolving to a public IPv4
        or IPv6 listening url accepting incoming WAMP-WebSocket connections,
        e.g. ``wss://service1.example.com/ws``.

        :return: The endpoint URL.
        )r   r\   r%   r%   r&   r!   7  s   	zSeeder.endpointc                 C   rY   rZ   )r   r\   r%   r%   r&   r"   B  r]   zSeeder.bandwidth_requestedc                 C   rY   rZ   )r   r\   r%   r%   r&   r#   J  r]   zSeeder.bandwidth_offered)NNNNNNN)NN)rK   r   )__name__
__module____qualname____doc__	__slots__r   strintr'   staticmethodbytesrH   r
   r   r   r	   rX   propertyr   r   r   r   r    r!   r"   r#   r%   r%   r%   r&   r   +   s    
	
iI
r   c                   @   s   e Zd ZU dZdZejdZdZ	e
ed< dde
deee
ef  fd	d
Zede
fddZede
fddZedeee
ef  fddZedee
 fddZedd ZdefddZedee fddZdd Zdd ZdS )r   a  
    A federated realm is a WAMP application realm with a trust anchor rooted in Ethereum, and
    which can be shared between multiple parties.

    A federated realm is globally identified on an Ethereum chain (e.g. on Mainnet or Rinkeby)
    by an Ethereum address associated to a federated realm owner by an on-chain record stored
    in the WAMP Network contract. The federated realm address thus only needs to exist as an
    identifier of the federated realm-owner record.
    )_name_or_address_gateway_config_status_name_category_w3_ens_address	_contract_seeders_root_ca_catalog_meta*0xF7acf1C4CB4a9550B8969576573C2688B48988C2r3   CONTRACT_ABINname_or_addressgateway_configc                 C   s`   || _ || _d| _t| j | _| jdvrtd| j d| _d| _d| _	d| _
g | _d| _dS )a  
        Instantiate a federated realm from a federated realm ENS name (which is resolved to an Ethereum
        address) or Ethereum address.

        :param name_or_address: Ethereum ENS name or address.
        :param gateway_config: If provided, use this Ethereum gateway. If not provided,
            connect via Infura to Ethereum Mainnet, which requires an environment variable
            ``WEB3_INFURA_PROJECT_ID`` with your Infura project ID.
        STOPPED)ethensreverse_ensz8name_or_address "{}" not an Ethereum address or ENS nameN)ri   rj   rk   r   rl   
ValueErrorformatrm   rn   ro   rp   rq   rr   )r$   rw   rx   r%   r%   r&   r'   p  s   


zFederatedRealm.__init__rK   c                 C   rY   N)rk   r\   r%   r%   r&   status     zFederatedRealm.statusc                 C   rY   r   )ri   r\   r%   r%   r&   rw     r   zFederatedRealm.name_or_addressc                 C   rY   r   )rj   r\   r%   r%   r&   rx     r   zFederatedRealm.gateway_configc                 C   rY   r   )rl   r\   r%   r%   r&   name_category  r   zFederatedRealm.name_categoryc                 C   rY   r   )ro   r\   r%   r%   r&   r<     r   zFederatedRealm.addressc                 C   s   | j dksJ | jS )NRUNNING)rk   rr   r\   r%   r%   r&   root_ca  s   zFederatedRealm.root_cac                 C   rY   r   )rq   r\   r%   r%   r&   seeders  r   zFederatedRealm.seedersc                 C   s(   | j dkrtd| j t| j}|S )r[   ry   zcannot start in status "{}")rk   RuntimeErrorr~   r   _initialize_background)r$   dr%   r%   r&   
initialize  s   

zFederatedRealm.initializec                 C   s   d| _ | jrt| j| _ntdt| j| _| jdv r9| jdkr.d	t
| jd}n| j}| j|| _n| jdkrG| j| j| _nJ d	d
| _ d S )NSTARTINGzJcannot auto-configure ethereum connection (was removed from web3.py in v6))r{   r|   r|   r3   .rz   Fzshould not arrive herer   )rk   rj   r   rm   r   r   	from_web3rn   rl   joinreversedri   splitr<   ro   toChecksumAddress)r$   r5   r%   r%   r&   r     s   



z%FederatedRealm._initialize_backgroundr   )r_   r`   ra   rb   rc   web3Web3r   CONTRACT_ADDRESSrv   rd   __annotations__r   r   r   r'   rh   r   rw   rx   r   r<   r   r   r   r   r   r   r   r%   r%   r%   r&   r   S  s*   
 	 #

r   )rQ   binasciir   typingr   r   r   r   r   web3.contractr   r{   r   twisted.internet.deferr	   r
   twisted.internet.threadsr   autobahn.wamp.interfacesr   r   autobahn.wamp.messager   autobahn.xbrr   r   objectr   r   r%   r%   r%   r&   <module>   s     *