
    tfM=                         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e          Z G 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                   d   e Zd ZdZdZ	 	 	 	 	 	 	 d&dddee         dee         dee         d	ee         d
ee         dee         dee         f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            Ze	 	 d'dedededee
         dee         defd            Zed(d            Zedee         fd            Zedee         fd             Zedee         fd!            Zedee         fd"            Zedee         fd#            Zedee         fd$            Zedee         fd%            ZdS ))Seederz

    _frealm	_operator_label_country_legal	_endpoint_bandwidth_requested_bandwidth_offeredNfrealmFederatedRealmoperatorlabelcountrylegalendpointbandwidth_requestedbandwidth_offeredc	                 v    || _         || _        || _        || _        || _        || _        || _        || _        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%   s	            S/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/xbr/_frealm.py__init__zSeeder.__init__:   sD    * (.(0%*'.%*(03F!1B    chain_idverifying_contractchannel_binding
channel_idblock_no	challengepubkeyrealmdelegateseeder	bandwidthc                     |pd}|pd}| sJ |sJ |J |J |sJ |sJ |sJ |sJ |sJ |
sJ 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 r*   namestring)r8   typeversionchainIduint256verifyingContractaddressr-   r.   bytes32r/   r0   r1   r2   r3   r4   r5   uint32)EIP712DomainEIP712SeederConnectrC   XBR1)r8   r;   )r<   r>   r-   r.   r/   r0   r1   r2   r3   r4   r5   )typesprimaryTypedomainmessage )r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   datas               r(   _create_eip712_connectzSeeder._create_eip712_connectX   s    */R&3
!!!!***%%% !' ( 
 !* ( 	! !* ) 
 !4 ) 
 !2 ( 
 !- ) 
 !+ ) 
 !, ) 
 !) ) 
 !( ) 
 !+ ) 
 !) ) 
 !, ( S-(9 9t 1 
 $%7#2($& $ & AM
 M
^ r*   
client_keydelegate_keyreturnc              #     K   d}d}d}t          j        d          }	t                              ||||||	|                    d          d|                    d          d|	          }
|                    |
          V }|                    d          |	||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/   r0   r1   r2   r3   r4   r5   (7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f)r1   r0   r-   r.   r2   r+   r/   r3   r4   r5   	signature)
osurandomr   rL   
public_keyr?   sign_typed_datar   r   decode)r'   rM   rN   r$   r.   r-   r+   r,   r/   r0   eip712_datarU   	authextras                r(   create_authextrazSeeder.create_authextra   s+       )JrNN	33XGYDS?I=E>G;E;P;PX\;P;];] ;G=I=Q=QY^=Q=_=_ <H>Q 4 S S '66{CCCC	 !++5+99 #  / %  ! ! %,,E,:: n - !++2244C"
 "
	F r*   c                     | j         S 

        :return:
        )r   r'   s    r(   r   zSeeder.frealm  s     |r*   c                     | j         S )z
        Operator address, e.g. ``"0xe59C7418403CF1D973485B36660728a5f4A8fF9c"``.

        :return: The Ethereum address of the endpoint operator.
        )r   ra   s    r(   r   zSeeder.operator  s     ~r*   c                     | j         S )z
        Operator endpoint label.

        :return: A human readable label for the operator or specific operator endpoint.
        )r   ra   s    r(   r    zSeeder.label  s     {r*   c                     | j         S )zz
        Operator country (ISO 3166-1 alpha-2), e.g. ``"US"``.

        :return: ISO 3166-1 alpha-2 country code.
        )r   ra   s    r(   r!   zSeeder.country&  s     }r*   c                     | j         S r_   )r   ra   s    r(   r"   zSeeder.legal/  s     {r*   c                     | j         S )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   ra   s    r(   r#   zSeeder.endpoint7  s     ~r*   c                     | j         S r_   )r   ra   s    r(   r$   zSeeder.bandwidth_requestedB  s     ((r*   c                     | j         S r_   )r   ra   s    r(   r%   zSeeder.bandwidth_offeredJ  s     &&r*   )NNNNNNN)NN)rO   r   )__name__
__module____qualname____doc__	__slots__r   strintr)   staticmethodbytesrL   r   r   r   r
   r]   propertyr   r   r    r!   r"   r#   r$   r%   rJ   r*   r(   r   r   +   s)        	I ,0(,*.(,+/6:48C C)C#C=C !C #3-	C
 !C $C=C '/smC %-SMC C C C< g g38g03g ,1g *-	g
 +0g (-g ',g */g (-g +.g g g \gR 
 8<:>G G%3G'3G /2G &.e_	G
 +33-G
 DLG G G _GR    X (3-    X x}    X #    X x}    X (3-    X )Xc] ) ) ) X) '8C= ' ' ' X' ' 'r*   r   c                   v   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	Zed
e
fd            Zed
e
fd            Zed
eee
ef                  fd            Zed
ee
         fd            Zed             Zd
efdZed
ee         fd            Zd Z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*0xF7acf1C4CB4a9550B8969576573C2688B48988C2r7   CONTRACT_ABINname_or_addressgateway_configc                    || _         || _        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)rt   ru   rv   r   rw   
ValueErrorformatrx   ry   rz   r{   r|   r}   )r'   r   r   s      r(   r)   zFederatedRealm.__init__p  s     !0- !-I$J_-`-`&CCCW^^_c_tuuvvv 	 (, .2 ')r*   rO   c                     | j         S N)rv   ra   s    r(   statuszFederatedRealm.status  s
    |r*   c                     | j         S r   )rt   ra   s    r(   r   zFederatedRealm.name_or_address  s    $$r*   c                     | j         S r   )ru   ra   s    r(   r   zFederatedRealm.gateway_config  s    ##r*   c                     | j         S r   )rw   ra   s    r(   name_categoryzFederatedRealm.name_category  s    ""r*   c                     | j         S r   )rz   ra   s    r(   r?   zFederatedRealm.address  
    }r*   c                 *    | j         dk    sJ | j        S )NRUNNING)rv   r}   ra   s    r(   root_cazFederatedRealm.root_ca  s    |y((((}r*   c                     | j         S r   )r|   ra   s    r(   seederszFederatedRealm.seeders  r   r*   c                     | j         dk    r't          d                    | j                             t          | j                  }|S )r`   r   zcannot start in status "{}")rv   RuntimeErrorr   r   _initialize_background)r'   ds     r(   
initializezFederatedRealm.initialize  sE    
 <9$$<CCDLQQRRR$566r*   c                    d| _         | j        rt          | j                  | _        nt	          d          t          j        | j                  | _        | j        dv rm| j        dk    r;d	                    t          | j                            d                              }n| j        }| j                            |          | _        n:| j        dk    r%| j                            | j                  | _        n
J d	            d
| _         d S )NSTARTINGzJcannot auto-configure ethereum connection (was removed from web3.py in v6))r   r   r   r7   .r   Fzshould not arrive herer   )rv   ru   r   rx   r   r	   	from_web3ry   rw   joinreversedrt   splitr?   rz   toChecksumAddress)r'   r8   s     r(   r   z%FederatedRealm._initialize_background  s    ! 	mt344DHHklll
 M$(++	"888"m33wwx(=(C(CC(H(HIIJJ, I--d33DMM E)) H66t7LMMDMM22222 !r*   r   )ri   rj   rk   rl   rm   web3Web3r   CONTRACT_ADDRESSr   rn   __annotations__r   r   r   r)   rr   r   r   r   r   r?   r   r   r   r   r   r   r   rJ   r*   r(   r   r   S  s         I  y223_``L#! ! !Xd3PS8n=U ! ! ! !F     X % % % % X% $c3h 8 $ $ $ X$ #x} # # # X#   X3     f    X  ! ! ! ! !r*   r   )rV   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   rJ   r*   r(   <module>r      sP  6 
			       , , , , , , , , , , , ,  " " " " " "       < < < < < < < < 2 2 2 2 2 2 A A A A A A A A > > > > > > < < < < < < < <e' e' e' e' e'V e' e' e'P	D! D! D! D! D!V D! D! D! D! D!r*   