o
    èó·iM=  ã                   @   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%   úZC:\Users\psant\Downloads\PAF backend\school\venv\Lib\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ÚchainIdZuint256ÚverifyingContractÚaddressr*   r+   Zbytes32r,   r-   r.   r/   r0   r1   r2   Zuint32)ZEIP712DomainÚEIP712SeederConnectr<   ZXBRÚ1)r5   r8   )r9   r:   r*   r+   r,   r-   r.   r/   r0   r1   r2   )ÚtypesZ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   Z(7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f)r.   r-   r*   r+   r/   r(   r,   r0   r1   r2   Ú	signatureN)
ÚosÚurandomr   rB   Z
public_keyr;   Zsign_typed_datar   r   Údecode)r$   rC   rD   r"   r+   r*   r(   r)   r,   r-   Zeip712_datarI   Z	authextrar%   r%   r&   Úcreate_authextraÂ   s>   €


ò


ß#zSeeder.create_authextrac                 C   ó   | j S ©ú

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

        :return: The Ethereum address of the endpoint operator.
        N)r   rQ   r%   r%   r&   r     ó   zSeeder.operatorc                 C   rN   )zƒ
        Operator endpoint label.

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

        :return: ISO 3166-1 alpha-2 country code.
        N)r   rQ   r%   r%   r&   r   &  rS   zSeeder.countryc                 C   rN   rO   )r   rQ   r%   r%   r&   r    /  rR   zSeeder.legalc                 C   rN   )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.
        N)r   rQ   r%   r%   r&   r!   7  s   	zSeeder.endpointc                 C   rN   rO   )r   rQ   r%   r%   r&   r"   B  rR   zSeeder.bandwidth_requestedc                 C   rN   rO   )r   rQ   r%   r%   r&   r#   J  rR   zSeeder.bandwidth_offered)NNNNNNN)NN)rE   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   ÚstrÚintr'   ÚstaticmethodÚbytesrB   r
   r   r   r	   rM   Ú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Ú_catalogZ_metaZ*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)r^   r_   r`   r   ra   Ú
ValueErrorÚformatrb   rc   rd   re   rf   rg   )r$   rj   rk   r%   r%   r&   r'   p  s   


zFederatedRealm.__init__rE   c                 C   rN   ©N)r`   rQ   r%   r%   r&   Ústatus“  ó   zFederatedRealm.statusc                 C   rN   rr   )r^   rQ   r%   r%   r&   rj   —  rt   zFederatedRealm.name_or_addressc                 C   rN   rr   )r_   rQ   r%   r%   r&   rk   ›  rt   zFederatedRealm.gateway_configc                 C   rN   rr   )ra   rQ   r%   r%   r&   Úname_categoryŸ  rt   zFederatedRealm.name_categoryc                 C   rN   rr   )rd   rQ   r%   r%   r&   r;   £  rt   zFederatedRealm.addressc                 C   s   | j dksJ ‚| jS )NÚRUNNING)r`   rg   rQ   r%   r%   r&   Úroot_ca§  s   zFederatedRealm.root_cac                 C   rN   rr   )rf   rQ   r%   r%   r&   Úseeders«  rt   zFederatedRealm.seedersc                 C   s(   | j dkrtd | j ¡ƒ‚t| jƒ}|S )rP   rl   zcannot start in status "{}"N)r`   ÚRuntimeErrorrq   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 )NZSTARTINGzJcannot auto-configure ethereum connection (was removed from web3.py in v6))rn   ro   ro   r3   Ú.rm   Fzshould not arrive hererv   )r`   r_   r   rb   ry   r   Z	from_web3rc   ra   ÚjoinÚreversedr^   Úsplitr;   rd   ÚtoChecksumAddress)r$   r5   r%   r%   r&   rz   ¹  s   



z%FederatedRealm._initialize_backgroundrr   )rT   rU   rV   rW   rX   Úweb3ZWeb3r�   ZCONTRACT_ADDRESSri   rY   Ú__annotations__r   r   r   r'   r]   rs   rj   rk   ru   r;   r   rw   r   r   rx   r|   rz   r%   r%   r%   r&   r   S  s*   
 	 #

r   )rJ   Úbinasciir   Útypingr   r   r   r   r‚   Zweb3.contractr   rn   r   Ztwisted.internet.deferr	   r
   Ztwisted.internet.threadsr   Zautobahn.wamp.interfacesr   r   Zautobahn.wamp.messager   Zautobahn.xbrr   r   Úobjectr   r   r%   r%   r%   r&   Ú<module>   s     *