ó
    ð›‘hƒ  ã                   óþ   • S SK r S SKrS SKrS SKrS SKJrJr  S SKJrJ	r	  S SK
Jr  SSKJrJr  S SKJr  S SKrS SKrS SKrS SKrS SKrS SKrSS	KJrJr  SS
KJrJr   " S S\5      r " S S\5      r " S S\5      r g)é    N)ÚRegisterOptionsÚCallDetails)ÚApplicationErrorÚTransportLost)ÚApplicationSessioné   )Úunpack_uint256Úpack_uint256)Útime_nsé   )ÚhlÚhlval)Úsign_eip712_channel_closeÚrecover_eip712_channel_closec                   óP   • \ rS rSrSrSS jr\S 5       rS rS r	S r
S	 rS
 rSrg)Ú	KeySeriesé1   zq
Data encryption key series with automatic (time-based) key rotation
and key offering (to the XBR market maker).
Nc                 óÂ  • [        U5      [        :X  a  [        U5      S:X  d   e[        U5      [        :X  a  US:¼  d   eUb  [        U5      [        :X  a  US:”  d   eUb  [        U5      [        :X  a  US:”  d   eUc  Uc  Ub  Ub   eUb  [	        U5      (       d   eXl        X l        X0l        X@l        SU l	        XPl
        SU l        SU l        SU l        0 U l        g)a§  

:param api_id: ID of the API for which to generate keys.
:type api_id: bytes

:param price: Price per key in key series.
:type price: int

:param interval: Interval in seconds after which to auto-rotate key.
:type interval: int

:param count: Number of encryption operations after which to auto-rotate key.
:type count: int

:param on_rotate: Optional user callback fired after key was rotated.
:type on_rotate: callable
é   r   N)ÚtypeÚbytesÚlenÚintÚcallableÚ_api_idÚ_priceÚ	_intervalÚ_countÚ_count_currentÚ
_on_rotateÚ_idÚ_keyÚ_boxÚ_archive)ÚselfÚapi_idÚpriceÚintervalÚcountÚ	on_rotates         ÚXC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\autobahn/xbr/_seller.pyÚ__init__ÚKeySeries.__init__7   sá   € ô$ �F‹|œuÓ$¬¨V«¸Ó):Ð:Ð:Ü�E‹{œcÓ! e¨q£jÐ0Ð0ØÑ¤D¨£N´cÓ$9¸hÈ»lÐKÐKØ‰}¤ e£´Ó!3¸À»	ÐBÐBØÑ  UÑ%6¸HÑ<PÐUZÑUbÐcÐcØÑ ¤H¨Y×$7Ñ$7Ð7Ð7àŒØŒØ!ŒØŒØˆÔØ#ŒàˆŒØˆŒ	ØˆŒ	Øˆ�ó    c                 ó   • U R                   $ )z’
Get current XBR data encryption key ID (of the keys being rotated
in a series).

:return: Current key ID in key series (16 bytes).
:rtype: bytes
)r!   ©r%   s    r+   Úkey_idÚKeySeries.key_id\   s   € ð �x‰xˆr.   c              ƒ   óD  #   • [         R                  " U5      nU R                  bN  U =R                  S-  sl        U R                  U R                  :¼  a  U R	                  5       I Sh  v•N   SU l        U R
                  R                  U5      nU R                  SU4$  N57f)zÍ
Encrypt data with the current XBR data encryption key.

:param payload: Application payload to encrypt.
:type payload: object

:return: The ciphertext for the encrypted application payload.
:rtype: bytes
Nr   r   Úcbor)Úcbor2Údumpsr   r   Ú_rotater#   Úencryptr!   )r%   ÚpayloadÚdataÚ
ciphertexts       r+   r8   ÚKeySeries.encryptg   sƒ   é € ô �{Š{˜7Ó#ˆà�;‰;Ñ"Ø×Ò 1Ñ$ÕØ×"Ñ" d§k¡kÓ1Ø—l‘l“n×$Ð$Ø&'�Ô#à—Y‘Y×&Ñ& tÓ,ˆ
à�x‰x˜ Ð+Ð+ñ %ùs   ‚A&B Á(BÁ)6B c                 ó®  • [        U5      [        :X  a  [        U5      S:X  d   e[        U5      [        :X  a  [        U5      S:X  d   eU R                  U   u  p4[        R
                  R                  [        R
                  R                  U[        R                  R                  S95      nUR                  U[        R                  R                  S9nU$ )a’  
Encrypt a (previously used) XBR data encryption key with a buyer public key.

:param key_id: ID of the data encryption key to encrypt.
:type key_id: bytes

:param buyer_pubkey: Buyer WAMP public key (Ed25519) to asymmetrically encrypt
    the data encryption key (selected by ``key_id``) against.
:type buyer_pubkey: bytes

:return: The ciphertext for the encrypted data encryption key.
:rtype: bytes
r   é    )Úencoder)r   r   r   r$   ÚnaclÚpublicÚ	SealedBoxÚ	PublicKeyÚencodingÚ
RawEncoderr8   )r%   r1   Úbuyer_pubkeyÚkeyÚ_Úsendkey_boxÚencrypted_keys          r+   Úencrypt_keyÚKeySeries.encrypt_key}   s³   € ô �F‹|œuÓ$¬¨V«¸Ó):Ð:Ð:Ü�LÓ!¤UÓ*¬s°<Ó/@ÀBÓ/FÐFÐFà—‘˜vÑ&‰ˆä—k‘k×+Ñ+¬D¯K©K×,AÑ,AÀ,ÜJNÏ-É-×JbÑJbð -Bð -dó eˆð $×+Ñ+¨C¼¿¹×9QÑ9QÐ+ÐRˆàÐr.   c                 ó   • [        5       e©N©ÚNotImplementedErrorr0   s    r+   ÚstartÚKeySeries.start—   ó   € Ü!Ó#Ð#r.   c                 ó   • [        5       erN   rO   r0   s    r+   ÚstopÚKeySeries.stopš   rS   r.   c              ƒ   ó¾  #   • [         R                  " S5      U l        [        R                  R                  [        R                  R                  R                  5      U l	        [        R                  R                  U R                  5      U l
        U R                  U R                  4U R                  U R                  '   U R                  R                  S[        SSS9[        [        R                   " U R                  S95      [        [        R                   " U R"                  S95      S9  U R$                  (       a  U R%                  U 5      I S h  v•N   g g  N7f)Nr   z4{tx_type} key "{key_id}" rotated [api_id="{api_id}"]z
XBR ROTATEÚmagenta©Úcolor©r   )Útx_typer1   r&   )ÚosÚurandomr!   r@   ÚutilsÚrandomÚsecretÚ	SecretBoxÚKEY_SIZEr"   r#   r$   ÚlogÚdebugr   ÚuuidÚUUIDr   r    r0   s    r+   r7   ÚKeySeries._rotate�   sè   é € ä—:’:˜b“>ˆŒô —J‘J×%Ñ%¤d§k¡k×&;Ñ&;×&DÑ&DÓEˆŒ	ô —K‘K×)Ñ)¨$¯)©)Ó4ˆŒ	ð $(§9¡9¨d¯i©iÐ"8ˆ�‰�d—h‘hÑà�‰�‰ØBÜ�|¨9Ñ5Ü”d—i’i d§h¡hÑ/Ó0Ü”d—i’i d§l¡lÑ3Ó4ð	 	ñ 	6ð �?�?Ø—/‘/ $Ó'×'Ñ'ð Ù'ùs   ‚EEÅEÅE)
r   r$   r#   r   r   r!   r   r"   r    r   ©NNN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r,   Úpropertyr1   r8   rK   rQ   rU   r7   Ú__static_attributes__© r.   r+   r   r   1   s:   † ñô
#ðJ ñó ðò,ò,ò4$ò$õ(r.   r   c                   ó   • \ rS rSrS rSrg)ÚPayingChanneléµ   c                 óÜ   • [        U5      [        :X  a  [        U5      S:X  d   e[        U5      [        :X  a  US:¼  d   e[        U5      [        :X  a  US:¼  d   eXl        X l        X0l        g )Nr   r   )r   r   r   r   Ú_adrÚ_seqÚ_balance)r%   ÚadrÚseqÚbalances       r+   r,   ÚPayingChannel.__init__¶   s]   € Ü�C‹yœEÓ!¤c¨#£h°"£nÐ4Ð4Ü�C‹yœCÓ C¨1£HÐ,Ð,Ü�G‹}¤Ó#¨°1«Ð4Ð4ØŒ	ØŒ	Ø�r.   )rv   rx   rw   N)rj   rk   rl   rm   r,   rp   rq   r.   r+   rs   rs   µ   s   † õ r.   rs   c                   ó‚   • \ rS rSrSrSrSrSrSrSr	Sr
SS jr\S	 5       rSS
 jrS rS rS rS r SS jrSS jrSrg)ÚSimpleSelleré¿   Nr   r   r   é   é   c                 ó@  • [        U5      [        :X  a  [        U5      S:X  d   SR                  U5      5       e[        U5      [        :X  a  [        U5      S:X  d   SR                  U5      5       eUb)  [        U5      [        :X  d   SR                  U5      5       e[
        R                  " 5       U l        [        R                  U l
        Xl        SU l        X l        [        R                  R!                  U5      U l        SU l        U R"                  R&                  R)                  5       U l        SU l        U=(       d    [	        U R"                  R&                  5      U l        0 U l        SU l        SU l        SU l        0 U l        0 U l        SU l        SU l        g)a¥  

:param market_maker_adr: Market maker public Ethereum address (20 bytes).
:type market_maker_adr: bytes

:param seller_key: Seller (delegate) private Ethereum key (32 bytes).
:type seller_key: bytes

:param provider_id: Optional explicit data provider ID. When not given, the seller delegate
    public WAMP key (Ed25519 in Hex) is used as the provider ID. This must be a valid WAMP URI part.
:type provider_id: string
é   z0market_maker_adr must be bytes[20], but got "{}"r>   z/seller delegate must be bytes[32], but got "{}"Nz0provider_id must be None or string, but got "{}"r   ) r   r   r   ÚformatÚstrÚtxaioÚmake_loggerrd   r~   Ú
STATE_NONEÚ_stateÚ_market_maker_adrÚ_xbrmm_configÚ	_pkey_rawÚeth_keysÚkeysÚ
PrivateKeyÚ_pkeyÚ_acctÚ
public_keyÚto_canonical_addressÚ_addrÚ_caddrÚ_provider_idÚ	_channelsÚ_channelrx   rw   Ú_keysÚ	_keys_mapÚ_sessionÚ_session_regs)r%   Úmarket_maker_adrÚ
seller_keyÚprovider_ids       r+   r,   ÚSimpleSeller.__init__Ê   s¢  € ô Ð$Ó%¬Ó.´3Ð7GÓ3HÈBÓ3Nð  	\ð  QC÷  QJñ  QJð  K[ó  Q\ó  	\ÐNÜ�JÓ¤5Ó(¬S°«_ÀÓ-Bð  	IÐDu×D|ÑD|ð  ~Hó  EIó  	IÐBØÑ"¤d¨;Ó&7¼3Ó&>ð  	GÐ@r×@yÑ@yð  {Fó  AGó  	GÐ>ä×$Ò$Ó&ˆŒô #×-Ñ-ˆŒð "2ÔØ!ˆÔð $Œô —]‘]×-Ñ-¨jÓ9ˆŒ
ð
 ˆŒ
ð —Z‘Z×*Ñ*×?Ñ?ÓAˆŒ
ð
 ˆŒð (×E¬3¨t¯z©z×/DÑ/DÓ+EˆÔàˆŒð ˆŒð ˆŒð ˆŒ	àˆŒ
ØˆŒð ˆŒØ!ˆÕr.   c                 ó.   • U R                   R                  $ )zp
This seller delegate public Ethereum key.

:return: Ethereum public key of this seller delegate.
:rtype: bytes
)r�   r’   r0   s    r+   r’   ÚSimpleSeller.public_key  s   € ð �z‰z×$Ñ$Ð$r.   c                 óv  ^ ^^^^• [        T5      [        :X  a  [        T5      S:X  a  TT R                  ;  d   e[        T5      [        :X  a  TS:¼  d   eUb  [        U5      [        :X  a  US:”  d   eUb  [        U5      [        :X  a  US:”  d   eUc  Uc  Ub  Ub   eTbR  [        T5      [
        :X  a8  S TR                  5        5       (       a  S TR                  5        5       (       d   S5       eUUUUU 4S jnT R                  TTXEUS9nUT R                  T'   T R                  R                  SUS	9  U$ )
aÏ  
Add a new (rotating) private encryption key for encrypting data on the given API.

:param api_id: API for which to create a new series of rotating encryption keys.
:type api_id: bytes

:param price: Price in XBR token per key.
:type price: int

:param interval: Interval (in seconds) after which to auto-rotate the encryption key.
:type interval: int

:param count: Number of encryption operations after which to auto-rotate the encryption key.
:type count: int
r   r   c              3   óF   #   • U  H  n[        U5      [        :H  v •  M     g 7frN   ©r   r…   )Ú.0Úks     r+   Ú	<genexpr>Ú#SimpleSeller.add.<locals>.<genexpr>+  s   é € ÐCnÒ\mÐWXÄDÈÃGÌsÆNÒ\mùó   ‚!c              3   óF   #   • U  H  n[        U5      [        :H  v •  M     g 7frN   r¥   )r¦   Úvs     r+   r¨   r©   +  s8   é € ð  taò  M`ð  HIÔtxÐyzÓt{ô  @Cö  uCò  M`ùrª   zZinvalid categories type (must be dict) or category key or value type (must both be string)c              “   óÄ  >#   • U R                   nU TR                  U'   SnU(       GaH   [        5       S-
  nTR                  n[        R
                  " S5      nTR                  nTR                  R                  SUT	TUUUS Tb  [        T5      OS T
S S US9I S h  v•N nTR                  R                  S[        SSS	9[        [        R                  " US
95      [        [        R                  " T	S
95      [        [        Tb  [!        TS-  5      OS5      S-   SS	9[        ["        R$                  " U5      R'                  5       5      [        T5      S9  TR                  R                  SUS9  g g  NÖ! [(         aT  nUR*                  S:X  a   TR                  R-                  S5         S nAOiTR                  R/                  5          S nAg S nAf[0         a    TR                  R-                  S5         g   TR                  R/                  5          O= fUS-  nTR                  R-                  SUS9  [2        R4                  " S5      I S h  v•N    U(       a  GM6  g 7f)Né   l    d(	 éA   zxbr.marketmaker.place_offer)Úprivkeyr'   Ú
categoriesÚexpiresÚcopiesrŸ   zh{tx_type} key "{key_id}" offered for {price} [api_id={api_id}, prefix="{prefix}", delegate="{delegate}"]z
XBR OFFER rX   rY   r[   ì     ÈNÎZor   ú XBR)r\   r1   r&   r'   ÚdelegateÚprefixzoffer={offer})Úofferzwamp.error.no_such_procedurez-xbr.marketmaker.offer: procedure unavailable!z2TransportLost while calling xbr.marketmaker.offer!r   z6Failed to place offer for key! Retrying {retries}/5 ..)Úretries)r1   rš   r   r”   r]   r^   r–   r›   Úcallr
   rd   re   r   rf   rg   r…   r   ÚbinasciiÚb2a_hexÚdecoder   ÚerrorÚwarnÚfailurer   ÚasyncioÚsleep)Ú
key_seriesr1   r¹   Ú
valid_fromr¶   Ú	signaturerŸ   r¸   Úer&   r±   r·   r'   r%   s            €€€€€r+   r*   Ú#SimpleSeller.add.<locals>.on_rotate-  s  øé € à×&Ñ&ˆFà%/ˆD�N‰N˜6Ñ"ð
 ˆGßð,'Ü!(£¨\Ñ!9�JØ#Ÿz™z�Hä "§
¢
¨2£�IØ"&×"3Ñ"3�Kà"&§-¡-×"4Ñ"4Ð5RØ5;Ø5;Ø5;Ø5?Ø5=Ø5>Ø=AØRWÑRc¼<ÈÔ;NÐimØ@JØ=AØ<@ØALð #5ð #N÷ N�Eð —H‘H—N‘Nð CÜ " <°yÑ AÜ!¤$§)¢)°&Ñ"9Ó:Ü!¤$§)¢)°&Ñ"9Ó:Ü ¤¸eÑ>O¤S¨°Ñ)9Ô%:ÐUVÓ!WÐZ`Ñ!`ÐhqÑrÜ!#¤H×$4Ò$4°XÓ$>×$EÑ$EÓ$GÓ!HÜ! &›zð #ñ +ð —H‘H—N‘N ?¸%�NÑ@àðC ñNøô6 (ó Ø—w‘wÐ"@Ó@ØŸ™Ÿ™Ð&U×VÑVàŸ™×(Ñ(Ô*ÜûÜ$ó Ø—H‘H—M‘MÐ"VÔWÙð'Ø—H‘H×$Ñ$Ö&úà˜1‘�Ø—‘—‘ÐVÐ`g�ÑhÜ—m’m AÓ&×&Ñ&÷c ’'ùsl   ƒ&I ªA1E4 ÂE2ÂCE4 Å0I Å2E4 Å4
HÅ>+GÆ)I Æ.GÇI Ç(HÇ5I Ç7HÈ=I ÉIÉI ÉI )r(   r)   r*   z#Created new key series {key_series})rÃ   )r   r   r   r™   r   ÚdictrŽ   Úvaluesr   rd   re   )	r%   r&   r·   r'   r(   r)   r±   r*   rÃ   s	   ````  `  r+   ÚaddÚSimpleSeller.add  sX  ü€ ô  �F‹|œuÓ$¬¨V«¸Ó):¸vÈTÏZÉZÓ?WÐWÐWÜ�E‹{œcÓ! e¨q£jÐ0Ð0ØÑ¤D¨£N´cÓ$9¸hÈ»lÐKÐKØ‰}¤ e£´Ó!3¸À»	ÐBÐBØÑ  UÑ%6¸HÑ<PÐUZÑUbÐcÐcØÑ!¤d¨:Ó&6¼$Ó&>ÑCnÐ\f×\kÑ\kÔ\m×CnÑCnñ  tað  MW÷  M^ñ  M^ô  M`÷  tañ  tað  	@ð  d@ó  	@ð  b÷;	'ñ ;	'ðz —^‘^ F¨E¸HÐ]f�^Ðgˆ
Ø'ˆ�
‰
�6ÑØ�‰�‰Ð<ÈˆÑTàÐr.   c           	   ƒ   óˆ  #   • [        U[        5      (       d   SR                  U5      5       eU R                  [        R
                  [        R                  4;   d   S5       e[        R                  U l        Xl        / U l	        U R                  R                  S[        U R                  5      [        R                  " U R                   R"                  SS 5      R%                  5       S9  UR'                  SU R(                  5      I Sh  v•N U l        U R*                  (       d  [-        S5      eU R*                  S	   n[/        U5      [0        :X  a  [3        U5      S
:X  d   e[4        R6                  " US9U l        SR                  U R:                  5      nUR=                  U R>                  U[A        SS9S9I Sh  v•N nU R                  RC                  U5        U R                  R                  S[        URD                  5      S9  SR                  U R:                  5      nUR=                  U RF                  U[A        SS9S9I Sh  v•N nU R                  RC                  U5        U R                  R                  S[        URD                  5      S9  U RH                  RK                  5        H  nURM                  5       I Sh  v•N   M     UR'                  S5      I Sh  v•N U l'        UR'                  SU R8                  R0                  5      I Sh  v•N n[/        US   5      [0        :X  a  [Q        US   5      US'   US   S:”  d  [-        S5      e[S        X&S   US   5      U RT                  U'   [        RV                  U l        US   U l,        [/        U RX                  5      [0        :X  a  [Q        U RX                  5      U l,        US   U l-        U R                  R]                  S[        U R8                  5      [_        U RX                  5      [_        U RZ                  5      S9  US   $  GN% GNv GNì GNr GNX GN(7f)zÜ
Start rotating keys and placing key offers with the XBR market maker.

:param session: WAMP session over which to communicate with the XBR market maker.
:type session: :class:`autobahn.wamp.protocol.ApplicationSession`
z/session must be an ApplicationSession, was "{}"zseller already runningzRStart selling from seller delegate address {address} (public key 0x{public_key}..)Né
   )Úaddressr’   z)xbr.marketmaker.get_active_paying_channelzno active paying channel foundÚchannel_oidr   r[   zxbr.provider.{}.sellÚdetails)Údetails_arg)Úoptionsz"Registered procedure "{procedure}")Ú	procedurezxbr.provider.{}.close_channelzxbr.marketmaker.get_configú*xbr.marketmaker.get_paying_channel_balanceÚ	remainingr   z0no off-chain balance remaining on paying channelrz   zvOk, seller delegate started [active paying channel {channel_oid} with remaining balance {remaining} at sequence {seq}])rÏ   rÕ   rz   )0Ú
isinstancer   r„   r‰   r~   rˆ   ÚSTATE_STOPPEDÚSTATE_STARTINGr›   rœ   rd   re   r   r•   r»   r¼   r�   r’   r½   rº   r”   r˜   Ú	Exceptionr   r   r   rf   rg   Ú_channel_oidr–   ÚregisterÚsellr   ÚappendrÓ   Úclose_channelr™   rÉ   rQ   r‹   r	   rs   r—   ÚSTATE_STARTEDrx   rw   Úinfor   )r%   ÚsessionrÏ   rÓ   ÚregrÃ   Úpaying_balances          r+   rQ   ÚSimpleSeller.startp  s„  é € ô ˜'Ô#5×6Ñ6ÐyÐ8i×8pÑ8pÐqxÓ8yÓyÐ6Ø�{‰{œ|×6Ñ6¼×8RÑ8RÐSÓSÐmÐUmÓmÐSä"×1Ñ1ˆŒØŒØˆÔà�‰�‰ÐkÜ! $§+¡+›Ü"*×"2Ò"2°4·:±:×3HÑ3HÈÈ"Ð3MÓ"N×"UÑ"UÓ"Wð 	ñ 	Yð
 &Ÿl™lÐ+VÐX\×XbÑXbÓc×cˆŒØ�}�}ÜÐ<Ó=Ð=à—m‘m MÑ2ˆÜ�KÓ ¤EÓ)¬c°+Ó.>À"Ó.DÐDÐDÜ ŸIšI¨KÑ8ˆÔà*×1Ñ1°$×2CÑ2CÓDˆ	Ø×$Ñ$ T§Y¡Y°	Ä?Ð_hÑCiÐ$Ðj×jˆØ×Ñ×!Ñ! #Ô&Ø�‰�‰Ð;ÄrÈ#Ï-É-ÓGXˆÑYà3×:Ñ:¸4×;LÑ;LÓMˆ	Ø×$Ñ$ T×%7Ñ%7¸ÌOÐhqÑLrÐ$Ðs×sˆØ×Ñ×!Ñ! #Ô&Ø�‰�‰Ð;ÄrÈ#Ï-É-ÓGXˆÑYàŸ*™*×+Ñ+Ö-ˆJØ×"Ñ"Ó$×$Ò$ñ .ð $+§<¡<Ð0LÓ#M×MˆÔð  'Ÿ|™|Ð,XÐZ^×ZkÑZk×ZqÑZqÓr×rˆä�˜{Ñ+Ó,´Ó5Ü*8¸ÈÑ9TÓ*UˆN˜;Ñ'à˜kÑ*¨QÓ.ÜÐNÓOÐOä&3°KÐPUÑAVÐXfÐgrÑXsÓ&tˆ�‰�{Ñ#Ü"×0Ñ0ˆŒð ' {Ñ3ˆŒÜ�—‘Ó¤%Ó'Ü*¨4¯=©=Ó9ˆDŒMØ" 5Ñ)ˆŒ	à�‰�‰ð  OÜ"$ T×%6Ñ%6Ó"7Ä5ÈÏÉÓCWÔ]bÐcg×clÑclÓ]mð 	ñ 	oð ˜kÑ*Ð*òY dò kò
 tò
 %âMò sùsp   ‚D	QÄP0ÄB1QÆ=P3Æ>BQÉ
P6ÉA<QËP9ËQË$P<Ë%2QÌP?ÌDQÐ3QÐ6QÐ9QÐ<QÐ?Qc              ƒ   ó:  #   • U R                   [        R                  4;   d   S5       e[        R                  U l         / nU R                  R                  5        H$  nUR                  5       nUR                  U5        M&     U R                  (       ak  U R                  (       aS  U R                  R                  5       (       a4  U R                   H$  nUR                  5       nUR                  U5        M&     SU l        [        R                  " U5      n UI Sh  v•N   [        R                   U l         SU l	        U R                  R#                  S5        g N<!   U R                  R                  5          NX= f! [        R                   U l         SU l	        f = f7f)z6
Stop rotating/offering keys to the XBR market maker.
úseller not runningNzOk, seller delegate stopped.)r‰   r~   rß   ÚSTATE_STOPPINGr™   rÉ   rU   rÝ   rœ   r›   Úis_attachedÚ
unregisterr†   Úgatherrd   rÀ   r×   rà   )r%   ÚdlrÃ   Údrâ   s        r+   rU   ÚSimpleSeller.stop±  s.  é € ð �{‰{œ|×9Ñ9Ð:Ó:ÐPÐ<PÓPÐ:ä"×1Ñ1ˆŒàˆØŸ*™*×+Ñ+Ö-ˆJØ—‘Ó!ˆAØ�I‰I�aŽLñ .ð ××Ø�}�} §¡×!:Ñ!:×!<Ñ!<à×-Ô-�CØŸ™Ó(�AØ—I‘I˜a–Lñ .ð "&ˆDÔä�LŠL˜Óˆð	!Ø�GˆGô '×4Ñ4ˆDŒKØ ˆDŒMà�‰�‰Ð4Õ5ñ øð	Ø�H‰H×ÑÖûä&×4Ñ4ˆDŒKØ ˆD�Müs<   ‚DFÄE ÄEÄE Ä8FÅE ÅE7Å5E: Å:FÆFc              ƒ   ó>  #   • U R                   [        R                  4;  a  [        S5      eU R                  (       a  U R                  R                  5       (       d  [        S5      eU R                  R                  SU R                  S   5      I Sh  v•N nU$  N7f)ah  
Return current (off-chain) balance of paying channel:

* ``amount``: The initial amount with which the paying channel was opened.
* ``remaining``: The remaining amount of XBR in the paying channel that can be earned.
* ``inflight``: The amount of XBR allocated to sell transactions that are currently processed.

:return: Current paying balance.
:rtype: dict
ræ   z!market-maker session not attachedrÔ   rÏ   N)r‰   r~   rß   ÚRuntimeErrorr›   rè   rº   r˜   )r%   rã   s     r+   r{   ÚSimpleSeller.balanceÒ  s€   é € ð �;‰;œ|×9Ñ9Ð:Ó:ÜÐ3Ó4Ð4Ø�}�} D§M¡M×$=Ñ$=×$?Ñ$?ÜÐBÓCÐCà#Ÿ}™}×1Ñ1Ð2^Ð`d×`mÑ`mÐn{Ñ`|Ó}×}ˆàÐñ ~ùs   ‚BBÂBÂBc              ƒ   ó  #   • [        U5      [        :X  a  [        U5      S:X  a  XR                  ;   d   e[        U5      [        :X  d   eUc   eU R                  U   nUR                  U5      I Sh  v•N u  pVnXVU4$  N7f)a÷  
Encrypt and wrap application payload for a given API and destined for a specific WAMP URI.

:param api_id: API for which to encrypt and wrap the application payload for.
:type api_id: bytes

:param uri: WAMP URI the application payload is destined for (eg the procedure or topic URI).
:type uri: str

:param payload: Application payload to encrypt and wrap.
:type payload: object

:return: The encrypted and wrapped application payload: a tuple with ``(key_id, serializer, ciphertext)``.
:rtype: tuple
r   N)r   r   r   r™   r…   r8   )r%   r&   Úurir9   Ú	keyseriesr1   Ú
serializerr;   s           r+   ÚwrapÚSimpleSeller.wrapæ  s‚   é € ô  �F‹|œuÓ$¬¨V«¸Ó):¸vÏÉÓ?SÐSÐSÜ�C‹yœCÓÐÐØÑ"Ð"Ð"à—J‘J˜vÑ&ˆ	à/8×/@Ñ/@ÀÓ/I×)IÑ&ˆ˜Jà :Ð-Ð-ñ *Jùs   ‚A1BÁ3A?Á4Bc                 ó.
  • [        U5      [        :X  a  [        U5      S:X  d   SR                  [        U5      5      5       e[        U5      [        :X  a  [        U5      S:X  d   SR                  [        U5      5      5       e[        U5      [        :X  d   SR                  [        U5      5      5       e[        U5      [        :X  a  [        U5      S:X  d   SR                  [        U5      5      5       e[        U5      [
        :X  d   SR                  [        U5      5      5       e[        U5      [        :X  a  [        U5      S	:X  d   S
R                  [        U5      5      5       eUb  [        U[        5      (       d   S5       eXR                  :w  a  [        SSR                  U R                  R                  [        R                  " U R                  5      R                  5       [        R                  " U5      R                  5       5      5      eX R                  S   :w  aœ  U R                   R#                  5         [        SSR                  U R                  R                  [        R                  " U R                  S   5      R                  5       [        R                  " U5      R                  5       5      5      eX0R$                  :w  a>  [        SSR                  U R                  R                  U R$                  S-   U5      5      e['        U5      nX@R(                  :w  a;  [        SSR                  U R                  R                  U R(                  U5      5      e[+        X#XEU5      nX�:w  aµ  U R,                  R/                  SU R                  R                  [1        [        R                  " U5      R                  5       5      [1        [        R                  " U5      R                  5       5      S9  [        SSR                  U R                  R                  5      5      e[3        U R4                  X#XE5      n	U R6                  U[9        U5      UU	S.n
U R,                  R;                  SU R                  R                  [1        SSS9[1        [=        [	        US-  5      5      S -   SS9[1        U5      [1        [        R                  " U5      R                  5       5      [1        UR>                  5      [1        UR@                  5      S!9  U
$ )"z9
Called by a XBR Market Maker to close a paying channel.
rƒ   z.market_maker_adr must be bytes[20], but was {}r   z)channel_oid must be bytes[16], but was {}z#channel_seq must be int, but was {}r>   z-channel_balance must be bytes[32], but was {}z)channel_is_final must be bool, but was {}r¯   z3marketmaker_signature must be bytes[65], but was {}ú/details must be autobahn.wamp.types.CallDetailsz!xbr.error.unexpected_delegate_adrzS{}.sell() - unexpected market maker (delegate) address: expected 0x{}, but got 0x{}rÏ   ú xbr.error.unexpected_channel_oidúJ{}.sell() - unexpected paying channel address: expected 0x{}, but got 0x{}ú xbr.error.unexpected_channel_seqúR{}.sell() - unexpected channel (after tx) sequence number: expected {}, but got {}r   ú$xbr.error.unexpected_channel_balanceúJ{}.sell() - unexpected channel (after tx) balance: expected {}, but got {}út{klass}.sell()::XBRSIG[4/8] - EIP712 signature invalid: signer_address={signer_address}, delegate_adr={delegate_adr}©ÚklassÚsigner_addressÚdelegate_adrúxbr.error.invalid_signatureúO{}.sell()::XBRSIG[4/8] - EIP712 signature invalid or not signed by market maker)r¶   rz   r{   Úis_finalrÅ   z·{klass}.close_channel() - {tx_type} closing channel {channel_oid}, closing balance {channel_balance}, closing sequence {channel_seq} [caller={caller}, caller_authid="{caller_authid}"]zXBR CLOSE  rX   rY   r´   rµ   )r  r\   Úchannel_balanceÚchannel_seqrÏ   ÚcallerÚcaller_authid)!r   r   r   r„   r   ÚboolrÖ   r   rŠ   r   Ú	__class__rj   r»   r¼   r½   r˜   r›   Úleaverw   r	   rx   r   rd   r¿   r   r   rŒ   r”   r
   re   r…   r	  r
  )r%   r�   rÏ   r  r  Úchannel_is_finalÚmarketmaker_signaturerÐ   r  Úseller_signatureÚreceipts              r+   rÞ   ÚSimpleSeller.close_channel   s  € ô
 Ð$Ó%¬Ó.´3Ð7GÓ3HÈBÓ3Nð  	`ð  QA÷  QHñ  QHô  IMð  N^ó  I_ó  Q`ó  	`ÐNÜ�KÓ ¤EÓ)¬c°+Ó.>À"Ó.Dð  	LÐFq×FxÑFxÔy}ð  Jó  zKó  GLó  	LÐDÜ�KÓ ¤CÓ'ÐhÐ)N×)UÑ)UÔVZÐ[fÓVgÓ)hÓhÐ'Ü�OÓ$¬Ó-´#°oÓ2FÈ"Ó2Lð  	\ÐN}÷  OEñ  OEô  FJð  KZó  F[ó  O\ó  	\ÐLÜÐ$Ó%¬Ó-ÐyÐ/Z×/aÑ/aÔbfÐgwÓbxÓ/yÓyÐ-ÜÐ)Ó*¬eÓ3¼Ð<QÓ8RÐWbÓ8cð  	ð  f[÷  fbñ  fbô  cgð  h}ó  c~ó  fó  	ÐcØ‰¤*¨W´k×"BÑ"BÐuÐDuÓuÐBð ×5Ñ5Ó5Ü"Ð#FØ#x×#Ñ#ð  AE÷  AOñ  AO÷  AXñ  AXô  Zb÷  Zjò  Zjð  ko÷  kAñ  kAó  ZB÷  ZIñ  ZIó  ZKô  MU÷  M]ò  M]ð  ^nó  Mo÷  Mvñ  Mvó  Mxó  $yózð zð Ÿ-™-¨Ñ6Ó6Ø�M‰M×ÑÔ!Ü"Ð#EØ#o×#vÑ#vÐw{÷  xFñ  xF÷  xOñ  xOô  QY÷  Qaò  Qað  bf÷  boñ  boð  p}ñ  b~ó  Q÷  QFñ  QFó  QHô  JR÷  JZò  JZð  [fó  Jg÷  Jnñ  Jnó  Jpó  $qórð rð Ÿ)™)Ó#Ü"Ð#EØ#w×#~Ñ#~ð  @D÷  @Nñ  @N÷  @Wñ  @Wð  Y]÷  Ybñ  Ybð  efñ  Yfð  hsó  $tóuð uô )¨Ó9ˆØŸm™mÓ+Ü"Ð#IØ#o×#vÑ#vÐw{÷  xFñ  xF÷  xOñ  xOð  QU÷  Q^ñ  Q^ð  `oó  $póqð qô 6°kÐP_ð  tIó  JˆØÓ-Ø�H‰H�M‰Mð  QØ $§¡× 7Ñ 7Ü)+¬H×,<Ò,<¸^Ó,L×,SÑ,SÓ,UÓ)VÜ')¬(×*:Ò*:Ð;KÓ*L×*SÑ*SÓ*UÓ'Vð ñ Xô #Ð#@ð  CT÷  C[ñ  C[ð  \`÷  \jñ  \j÷  \sñ  \só  Ctó  uð  uô 5°T·^±^À[Ð_nó  BÐð Ÿ
™
ØÜ# OÓ4Ø(Ø)ñ
ˆð 	�‰�‰ð  QØ!Ÿ^™^×4Ñ4Ü! -°yÑAÜ')¬#¬c°/ÀHÑ2LÓ.MÓ*NÐQWÑ*WÐ_hÑ'iÜ#% k£?Ü#%¤h×&6Ò&6°{Ó&C×&JÑ&JÓ&LÓ#MÜ  §¡Ó0Ü%'¨×(=Ñ(=Ó%>ð 	ñ 	@ð ˆr.   c
                 óZ  • [        U5      [        :X  a  [        U5      S:X  d   S5       e[        U5      [        :X  a  [        U5      S:X  d   S5       e[        U5      [        :X  a  [        U5      S:X  d   S5       e[        U5      [        :X  a  [        U5      S:X  d   S5       e[        U5      [        :X  d   S5       e[        U5      [        :X  a  [        U5      S:X  d   S	R	                  [        U5      5      5       e[        U5      [        :X  a  [        U5      S:X  d   S
R	                  [        U5      5      5       e[        U5      [        :X  a  [        U5      S:X  d   S5       eU	b  [        U	[        5      (       d   S5       e[        U5      n[        U5      nXR                  :w  a  [        SSR	                  U R                  R                  [        R                  " U R                  5      R                  5       [        R                  " U5      R                  5       5      5      eX0R                  ;  a0  [        SSR	                  U R                  R                  U5      5      eU R                  U   n
X@R                   S   :w  aœ  U R"                  R%                  5         [        SSR	                  U R                  R                  [        R                  " U R                   S   5      R                  5       [        R                  " U5      R                  5       5      5      eXPR&                  S-   :w  a>  [        SSR	                  U R                  R                  U R&                  S-   U5      5      eXpR(                  U-
  :w  a>  [        SSR	                  U R                  R                  U R(                  U-
  U5      5      eSnU R*                  S   n[        R,                  " U R*                  S   SS 5      nU R                   S   n[/        XÍUXäXWSU5	      nXñ:w  aµ  U R0                  R3                  S U R                  R                  [5        [        R                  " U5      R                  5       5      [5        [        R                  " U5      R                  5       5      S!9  [        S"S#R	                  U R                  R                  5      5      eU =R&                  S-  sl        U =R(                  U-  sl        U
R7                  X25      n[        U5      [        :X  a  [        U5      S$:X  d+   S%R	                  U R                  R                  U5      5       e[9        U R:                  XÍX¾X@R&                  U R(                  S5	      nUU R<                  UUU R&                  UU R(                  US&.nU R0                  R?                  S'U R                  R                  [5        S(S)S*9[5        [@        RB                  " US+95      [5        [E        [        US,-  5      5      S--   S)S*9[5        [E        [        U R(                  S,-  5      5      S--   S)S*9[5        U	RF                  5      [5        U	RH                  5      [5        [        R                  " U5      R                  5       5      S.9	  U$ )/aœ  
Called by a XBR Market Maker to buy a data encyption key. The XBR Market Maker here is
acting for (triggered by) the XBR buyer delegate.

:param market_maker_adr: The market maker Ethereum address. The technical buyer is usually the
    XBR market maker (== the XBR delegate of the XBR market operator).
:type market_maker_adr: bytes of length 20

:param buyer_pubkey: The buyer delegate Ed25519 public key.
:type buyer_pubkey: bytes of length 32

:param key_id: The UUID of the data encryption key to buy.
:type key_id: bytes of length 16

:param channel_oid: The on-chain channel contract address.
:type channel_oid: bytes of length 16

:param channel_seq: Paying channel sequence off-chain transaction number.
:type channel_seq: int

:param amount: The amount paid by the XBR Buyer via the XBR Market Maker.
:type amount: bytes

:param balance: Balance remaining in the payment channel (from the market maker to the
    seller) after successfully buying the key.
:type balance: bytes

:param signature: Signature over the supplied buying information, using the Ethereum
    private key of the market maker (which is the delegate of the marker operator).
:type signature: bytes of length 65

:param details: Caller details. The call will come from the XBR Market Maker.
:type details: :class:`autobahn.wamp.types.CallDetails`

:return: The data encryption key, itself encrypted to the public key of the original buyer.
:rtype: bytes
rƒ   zdelegate_adr must be bytes[20]r>   zbuyer_pubkey must be bytes[32]r   zkey_id must be bytes[16]zchannel_oid must be bytes[16]zchannel_seq must be intz)amount_paid must be bytes[32], but was {}z*post_balance must be bytes[32], but was {}r¯   zsignature must be bytes[65]Nrø   z$xbr.error.unexpected_marketmaker_adrzH{}.sell() - unexpected market maker address: expected 0x{}, but got 0x{}zcrossbar.error.no_such_objectz{}.sell() - no key with ID "{}"rÏ   rù   rú   r   rû   rü   rý   rþ   Úverifying_chain_idÚverifying_contract_adrr   Ú
market_oidFrÿ   r   r  r  éP   zC{}.sell() - unexpected sealed key computed (expected bytes[80]): {})r1   r¶   rF   Ú
sealed_keyr  Úamountr{   rÅ   z«{klass}.sell() - {tx_type} key "{key_id}" sold for {amount_earned} - balance is {balance} [caller={caller}, caller_authid="{caller_authid}", buyer_pubkey="{buyer_pubkey}"]z
XBR SELL  rX   rY   r[   r´   rµ   )r  r\   r1   Úamount_earnedr{   r	  r
  rF   )%r   r   r   r   r„   rÖ   r   r	   rŠ   r   r  rj   r»   r¼   r½   rš   r˜   r›   r  rw   rx   r‹   Úa2b_hexr   rd   r¿   r   rK   r   rŒ   r”   rà   rf   rg   r…   r	  r
  )r%   r�   rF   r1   rÏ   r  r  r{   rÅ   rÐ   rÃ   Úcurrent_block_numberr  r  r  r  r  r  r  s                      r+   rÜ   ÚSimpleSeller.sellB  sk  € ôL Ð$Ó%¬Ó.´3Ð7GÓ3HÈBÓ3NÐpÐPpÓpÐNÜ�LÓ!¤UÓ*¬s°<Ó/@ÀBÓ/FÐhÐHhÓhÐFÜ�F‹|œuÓ$¬¨V«¸Ó):ÐVÐ<VÓVÐ:Ü�KÓ ¤EÓ)¬c°+Ó.>À"Ó.DÐeÐFeÓeÐDÜ�KÓ ¤CÓ'ÐBÐ)BÓBÐ'Ü�F‹|œuÓ$¬¨V«¸Ó):Ð|Ð<g×<nÑ<nÔosÐtzÓo{Ó<|Ó|Ð:Ü�G‹}¤Ó%¬#¨f«+¸Ó*;ÐÐ=i×=pÑ=pÔquÐv}Óq~Ó=ÓÐ;Ü�I‹¤%Ó'¬C°	«N¸{Ó,KÐjÐMjÓjÐKØ‰¤*¨W´k×"BÑ"BÐuÐDuÓuÐBä Ó'ˆÜ  Ó)ˆð ×5Ñ5Ó5Ü"Ð#IØ#m×#tÑ#tÐuy÷  vDñ  vD÷  vMñ  vMô  OW÷  O_ò  O_ð  `d÷  `vñ  `vó  Ow÷  O~ñ  O~ó  O@ô  BJ÷  BRò  BRð  Scó  Bd÷  Bkñ  Bkó  Bmó  $nóoð oð Ÿ™Ó'Ü"Ð#BÐDe×DlÑDlÐmq×m{Ñm{÷  nEñ  nEð  GMó  ENó  Oð  OØ—^‘^ FÑ+ˆ
ð Ÿ-™-¨Ñ6Ó6Ø�M‰M×ÑÔ!Ü"Ð#EØ#o×#vÑ#vÐw{÷  xFñ  xF÷  xOñ  xOô  QY÷  Qaò  Qað  bf÷  boñ  boð  p}ñ  b~ó  Q÷  QFñ  QFó  QHô  JR÷  JZò  JZð  [fó  Jg÷  Jnñ  Jnó  Jpó  $qórð rð Ÿ)™) a™-Ó'Ü"Ð#EØ#w×#~Ñ#~ð  @D÷  @Nñ  @N÷  @Wñ  @Wð  Y]÷  Ybñ  Ybð  efñ  Yfð  hsó  $tóuð uð —m‘m fÑ,Ó,Ü"Ð#IØ#o×#vÑ#vÐw{÷  xFñ  xF÷  xOñ  xOð  QU÷  Q^ñ  Q^ð  agñ  Qgð  ipó  $qórð rð  !ÐØ!×/Ñ/Ð0DÑEÐÜ!)×!1Ò!1°$×2DÑ2DÐE]Ñ2^Ð_`Ð_aÐ2bÓ!cÐà—]‘] <Ñ0ˆ
ô 6Ð6HÐbvØ6@È{ÐejÐluówˆàÓ-Ø�H‰H�M‰Mð  QØ $§¡× 7Ñ 7Ü)+¬H×,<Ò,<¸^Ó,L×,SÑ,SÓ,UÓ)VÜ')¬(×*:Ò*:Ð;KÓ*L×*SÑ*SÓ*UÓ'Vð ñ Xô #Ð#@ð  CT÷  C[ñ  C[ð  \`÷  \jñ  \j÷  \sñ  \só  Ctó  uð  uð 	�	Š	�Q‰�	Ø�Š˜Ñ�ð  ×+Ñ+¨FÓAˆ
ä�JÓ¤5Ó(¬S°«_ÀÓ-Bð  	vð  EJ÷  EQñ  EQð  RV÷  R`ñ  R`÷  Riñ  Rið  kuó  Evó  	vÐBô 5°T·^±^ÐEWØ5IÐWb×dmÑdmØ59·]±]ÀEóKÐð ð Ÿ
™
ð )ð
 %ð  Ÿ9™9ð ð —}‘}ð *ñ3
ˆð8 	�‰�‰ð  DØ ŸN™N×3Ñ3Ü  °YÑ?Ü¤§	¢	°Ñ 7Ó8Ü$&¤s¬3¨v¸Ñ/@Ó+AÓ'BÀVÑ'KÐS\Ñ$]Ü ¤¤S¨¯©¸Ñ)AÓ%BÓ!CÀfÑ!LÐT]Ñ^ä §¡Ó/Ü$& w×'<Ñ'<Ó$=Ü#%¤h×&6Ò&6°|Ó&D×&KÑ&KÓ&MÓ#Nð 	ñ 		Pð ˆr.   )r‘   r”   rx   r•   r˜   rÚ   r—   r™   rš   rŠ   r�   rŒ   r–   rw   r›   rœ   r‰   r‹   rd   rN   ri   )rj   rk   rl   rm   rd   r   rˆ   rØ   rß   rç   r×   r,   ro   r’   rÊ   rQ   rU   r{   rõ   rÞ   rÜ   rp   rq   r.   r+   r~   r~   ¿   so   † à
€CØ€Ià€JØ€NØ€MØ€NØ€Mô@"ðD ñ%ó ð%ôXòt?+òB6òBò(.ð6 6:ô@÷DTr.   r~   )!rÁ   r»   r]   rf   Úautobahn.wamp.typesr   r   Úautobahn.wamp.exceptionr   r   Úautobahn.wamp.protocolr   Ú_utilr	   r
   r†   r   r5   r�   Únacl.secretr@   Ú
nacl.utilsÚnacl.publicÚutilr   r   Ú_eip712_channel_closer   r   Úobjectr   rs   r~   rq   r.   r+   Ú<module>r(     sc   ðó6 Û Û 	Û ç <ß CÝ 5ß /Ý ã Û Û Û Û Û ç ß ZôA(�ô A(ôH �Fô  ôW�6õ Wr.   