
    LfM=                         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y)    N)b2a_hex)OptionalDictAnyList)Contract)ENS)DeferredinlineCallbacks)deferToThread)ICryptosignKeyIEthereumKey)identify_realm_name_category)make_w3EIP712AuthorityCertificatec                      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y))Seederz

    _frealm	_operator_label_country_legal	_endpoint_bandwidth_requested_bandwidth_offeredNfrealmFederatedRealmoperatorlabelcountrylegalendpointbandwidth_requestedbandwidth_offeredc	                 t    || _         || _        || _        || _        || _        || _        || _        || _        y)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	            O/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/autobahn/xbr/_frealm.py__init__zSeeder.__init__:   s>    * (.(0%*'.%*(03F!1B    chain_idverifying_contractchannel_binding
channel_idblock_no	challengepubkeyrealmdelegateseeder	bandwidthc                    |xs d}|xs 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   so    */R&3
x!!!***%%%xyvuxy !' (
 !* (	! !* )
 !4 )
 !2 (
 !- )
 !+ )
 !, )
 !) )
 !( )
 !+ )
 !) )
 !, (S-(9t 1
 $%7#2($& $ &AM
^ r*   
client_keydelegate_keyreturnc              #     K   d}d}d}t        j                  d      }	t        j                  ||||||	|j	                  d      d|j                  d      d|	      }
|j                  |
      }|j	                  d      |	||d
|||j                  d      | j                  |t        |      j                         d}|S w)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
      )JJrN	33XGYDS?I=E>G;E;P;PX\;P;] ;G=I=Q=QY^=Q=_ <H>Q 4 S '66{CC	 !++5+9 #  / %  ! ! %,,E,: nn - !+224C"
	F s   C C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   +   sx   	I ,0(,*.(,+/6:48C)C#C=C !C #3-	C
 !C $C=C '/smC %-SMC< g g38g03g ,1g *-	g
 +0g (-g ',g */g (-g +.g gR 
 8<:>G%3G'3G /2G &.e_	G
 +33-G
 DLG GR   (3-   x}   #   x}   (3-   )Xc] ) ) '8C= ' 'r*   r   c                   .   e Zd ZU dZdZej                  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y)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                  | j                               d| _        d| _        d| _	        d| _
        g | _        d| _        y)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_J_-`&CCW^^_c_t_tu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k7  r$t        dj                  | j                               t        | j                        }|S )r`   r   zcannot start in status "{}")rv   RuntimeErrorr   r   _initialize_background)r'   ds     r(   
initializezFederatedRealm.initialize  s@    
 <<9$<CCDLLQRR$556r*   c                 V   d| _         | j                  rt        | j                        | _        nt	        d      t        j                  | j                        | _        | j                  dv rw| j                  dk(  r4dj                  t        | j                  j                  d                  }n| j                  }| j                  j                  |      | _        d	| _         y | j                  dk(  r2| j                  j                  | j                        | _        d	| _         y J d       )
NSTARTINGzJcannot auto-configure ethereum connection (was removed from web3.py in v6))r   r   r   r7   .r   z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    !t334DHkll
 MM$((+	"88""m3wwx(=(=(C(CC(HIJ,, II--d3DM !   E) HH66t7L7LMDM ! 3225r*   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  yy223_`L#! !Xd3PS8n=U !F    % % % $c3h 8 $ $ #x} # #  3  f  !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      sH   6 
  , ,  "  < 2 A > <e'V e'P	D!V D!r*   