ó
    ð›‘h	m  ã                   óÔ   • S SK r S SK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rS SKJr  S SKJr  SSKJrJ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g)é    N)Úpformat)ÚApplicationError)ÚApplicationSessioné   )Úunpack_uint256Úpack_uint256é   )ÚhlÚhlval)Úsign_eip712_channel_closeÚrecover_eip712_channel_closec                   ó&   • \ rS rSrS rS rS rSrg)ÚTransactioné1   c	                 ód   • Xl         X l        X0l        X@l        XPl        X`l        Xpl        X€l        g ©N©ÚchannelÚdelegateÚpubkeyÚkey_idÚchannel_seqÚamountÚbalanceÚ	signature)	Úselfr   r   r   r   r   r   r   r   s	            ÚWC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\autobahn/xbr/_buyer.pyÚ__init__ÚTransaction.__init__3   s+   € ØŒØ ŒØŒØŒØ&ÔØŒØŒØ"�ó    c           	      ó¼   • U R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  S.nU$ )Nr   r   )r   Úress     r   ÚmarshalÚTransaction.marshal=   sJ   € à—|‘|ØŸ™Ø—k‘kØ—k‘kØ×+Ñ+Ø—k‘kØ—|‘|ØŸ™ñ	
ˆð ˆ
r    c                 ó4   • [        U R                  5       5      $ r   )r   r#   ©r   s    r   Ú__str__ÚTransaction.__str__J   s   € Ü�t—|‘|“~Ó&Ð&r    )r   r   r   r   r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r#   r'   Ú__static_attributes__© r    r   r   r   1   s   † ò#òõ'r    r   c                   óv   • \ rS rSrSrSrS rS rS rS r	SS jr
SS	 jrS
 rS rS rSS jrS rS rS rSrg)ÚSimpleBuyeréN   z¢
Simple XBR buyer component. This component can be used by a XBR buyer delegate to
handle the automated buying of data encryption keys from the XBR market maker.
Nc                 ó  • [        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5      [        :X  a  US:”  d   e[
        R                  " 5       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        [(        R*                  R                  R-                  5       U l        X0l        SU l        SU l        SU l        0 U l        SU l        SU l        SU l        0 U l         / U l!        g)	zâ

:param market_maker_adr:
:type market_maker_adr:

:param buyer_key: Consumer delegate (buyer) private Ethereum key.
:type buyer_key: bytes

:param max_price: Maximum price we are willing to buy per key.
:type max_price: int
é   z0market_maker_adr must be bytes[20], but got "{}"é    z.buyer delegate must be bytes[32], but got "{}"r   NFT)"ÚtypeÚbytesÚlenÚformatÚintÚtxaioÚmake_loggerÚlogÚ_market_maker_adrÚ_xbrmm_configÚ	_pkey_rawÚeth_keysÚkeysÚ
PrivateKeyÚ_pkeyÚ_acctÚ
public_keyÚto_canonical_addressÚ_addrÚ_caddrÚnaclÚpublicÚgenerateÚ_receive_keyÚ
_max_priceÚ_channelÚ_balanceÚ_seqÚ_keysÚ_sessionÚ_runningÚ_auto_close_channelÚ_transaction_idxÚ_transactions)r   Úmarket_maker_adrÚ	buyer_keyÚ	max_prices       r   r   ÚSimpleBuyer.__init__U   s…  € ô Ð$Ó%¬Ó.´3Ð7GÓ3HÈBÓ3Nð  	\ð  QC÷  QJñ  QJð  K[ó  Q\ó  	\ÐNÜ�I‹¤%Ó'¬C°	«N¸bÓ,@ð  	EÐBr×ByÑByð  {Dó  CEó  	EÐ@Ü�I‹¤#Ó%¨)°a«-Ð7Ð7ä×$Ò$Ó&ˆŒð "2ÔØ!ˆÔð #Œô —]‘]×-Ñ-¨iÓ8ˆŒ
ð
 ˆŒ
ð —Z‘Z×*Ñ*×?Ñ?ÓAˆŒ
ð
 ˆŒô !ŸK™K×2Ñ2×;Ñ;Ó=ˆÔð $Œð ˆŒð ˆŒð ˆŒ	ð ˆŒ
ØˆŒØˆŒð $(ˆÔ ð !#ˆÔØˆÕr    c           	   ƒ   ó8  #   • [        U[        5      (       d   e[        U5      [        :X  d   eU R                  (       a   eXl        SU l        U R                  R                  S[        U R                  5      [        R                  " U R                  R                  SS 5      R                  5       S9   UR                  S5      I Sh  v•N U l        [        U R"                  5      [$        :X  a  ['        U R"                  5      S:X  d   e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      [$        :X  a  ['        U5      S:X  d   e[,        R.                  " US9U l        UR                  SU R0                  R$                  5      I Sh  v•N n[        US   5      [$        :X  a  [5        US   5      US'   US   S:”  d  [+        S5      eUS   U l        US   U l        U R                  R;                  S[        U R0                  5      [=        U R6                  5      [=        U R8                  5      S9  U R6                  $  GN± GNS Nº!   UR3                  5         e = f7f)aV  
Start buying keys to decrypt XBR data by calling ``unwrap()``.

:param session: WAMP session over which to communicate with the XBR market maker.
:type session: :class:`autobahn.wamp.protocol.ApplicationSession`

:param consumer_id: XBR consumer ID.
:type consumer_id: str

:return: Current remaining balance in payment channel.
:rtype: int
TzSStart buying from consumer delegate address {address} (public key 0x{public_key}..)Né
   )ÚaddressrE   zxbr.marketmaker.get_configr3   z*xbr.marketmaker.get_active_payment_channelzno active payment channel foundÚchannel_oidé   ©r6   ú+xbr.marketmaker.get_payment_channel_balanceÚ	remainingr   z1no off-chain balance remaining on payment channelÚseqzvOk, buyer delegate started [active payment channel {channel_oid} with remaining balance {remaining} at sequence {seq}])r^   rb   rc   )Ú
isinstancer   r5   ÚstrrS   rR   r<   Údebugr
   rH   ÚbinasciiÚb2a_hexrC   rE   ÚdecodeÚcallr>   rG   r6   r7   rN   Ú	ExceptionÚuuidÚUUIDÚ_channel_oidÚleaver   rO   rP   Úinfor   )r   ÚsessionÚconsumer_idr^   Úpayment_balances        r   ÚstartÚSimpleBuyer.startš   s3  é € ô ˜'Ô#5×6Ñ6Ð6Ð6Ü�KÓ ¤CÓ'Ð'Ð'Ø—=—=Ð Ð àŒØˆŒà�‰�‰ÐlÜ! $§+¡+›Ü"*×"2Ò"2°4·:±:×3HÑ3HÈÈ"Ð3MÓ"N×"UÑ"UÓ"Wð 	ñ 	Yð	Ø'.§|¡|Ð4PÓ'Q×!QˆDÔô ˜Ÿ
™
Ó#¤uÓ,´°T·Z±Z³ÀBÓ1FÐFÐFØ")§,¡,Ð/[Ð]a×]gÑ]gÓ"h×hˆDŒMØ—=—=ÜÐ AÓBÐBàŸ-™-¨Ñ6ˆKÜ˜Ó$¬Ó-´#°kÓ2BÀbÓ2HÐHÐHÜ $§	¢	°Ñ <ˆDÔð %,§L¡LÐ1^Ð`d×`qÑ`q×`wÑ`wÓ$x×xˆOô � Ñ,Ó-´Ó6Ü+9¸/È+Ñ:VÓ+WˆO˜KÑ(à˜{Ñ+¨aÓ/ÜÐOÓPÐPà'¨Ñ4ˆŒØ# EÑ*ˆŒ	à�‰�‰ð  OÜ"$ T×%6Ñ%6Ó"7Ä5ÈÏÉÓCWÔ]bÐcg×clÑclÓ]mð 	ñ 	oð �}‰}Ðò? "Rò iñ yøð	Ø�M‰MŒOØüsW   ‚B4JÂ7J ÃI<ÃA J Ä,I?Ä-BJ ÇJÇJ ÇB0JÉ<J É?J ÊJ ÊJÊJc              ƒ   óv   #   • U R                   (       d   eSU l         U R                  R                  S5        g7f)z
Stop buying keys.
FzOk, buyer delegate stopped.N)rS   r<   rp   r&   s    r   ÚstopÚSimpleBuyer.stopÔ   s+   é € ð �}�}Ðˆ}àˆŒà�‰�‰Ð3Õ4ùs   ‚79c              ƒ   óØ   #   • U R                   (       a  U R                   R                  5       (       d   eU R                   R                  SU R                  S   5      I Sh  v•N nU$  N7f)a^  
Return current balance of payment channel:

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

:return: Current payment balance.
:rtype: dict
ra   r^   N)rR   Úis_attachedrj   rN   )r   rs   s     r   r   ÚSimpleBuyer.balanceÞ   sY   é € ð �}�} §¡×!:Ñ!:×!<Ñ!<Ð<Ð<à $§¡× 2Ñ 2Ð3`Ðbf×boÑboÐp}Ñb~Ó ×ˆàÐñ @ùs   ‚AA*Á!A(Á"A*c              ƒ   ó"  #   • U R                   (       a  U R                   R                  5       (       d   e[        R                  " S5      nU R                   R	                  SUU R
                  UU5      I Sh  v•N nUS   US   US   S.nU$  N7f)zQ

:param amount:
:type amount:

:param details:
:type details:

:return:
:rtype:
é@   z$xbr.marketmaker.open_payment_channelNr   rb   Úinflight)r   rb   r~   )rR   rz   ÚosÚurandomrj   rG   )r   Ú
buyer_addrr   Údetailsr   Úpayment_channelr   s          r   Úopen_channelÚSimpleBuyer.open_channelï   sŽ   é € ð �}�} §¡×!:Ñ!:×!<Ñ!<Ð<Ð<ô —J’J˜r“Nˆ	à $§¡× 2Ñ 2Ð3YØ3=Ø37·:±:Ø39Ø3<ó	!>÷ >ˆð & hÑ/Ø(¨Ñ5Ø'¨
Ñ3ñ
ˆð ˆñ>ùs   ‚A5BÁ7BÁ8Bc              ƒ   ó   #   • g7f)zC
Requests to close the currently active payment channel.

:return:
Nr.   )r   r‚   s     r   Úclose_channelÚSimpleBuyer.close_channel  s   é � ùs   ‚c              ƒ   ó`  #   • [        U5      [        :X  a  [        U5      S:X  d   e[        U5      [        :X  a  US;   d   e[        U5      [        :X  d   eU R                  S   nU R                  S   nSnU R
                  S   n[        R                  " U R
                  S   SS	 5      nXR                  ;   a7  U R                  R                  S
[        [        R                  " US95      S9  GOU R                  R                  S[        [        R                  " US95      S9  SU R                  U'   U R                  R                  SU5      I S	h  v•N n	[!        U	S   5      n
U R                  R                  S[        [        R                  " US95      [        [#        U
S-  5      5      S9  X R$                  :”  af  ['        SSR)                  U R*                  R,                  [        R                  " US9[#        U
S-  5      [#        U R$                  S-  5      5      5      eU R.                  U
-
  nUS:  Ga“  U R0                  (       Ga  S	nU R3                  5       nU(       a  US   nU(       aö  U R4                  nU R.                  nSn[7        U R8                  UUUUUUUU5	      nU R                  R                  S[        R                  " US9U[#        US-  5      US9  U R                  R                  SUUUU[;        U5      UUU5	      I S	h  v•N   ['        SSR)                  U R*                  R,                  [        R                  " US9U[#        US-  5      5      5      e['        SSR)                  U R*                  R,                  [        R                  " US9[#        U R.                  S-  5      [#        U
S-  5      5      5      eU R<                  R>                  RA                  [B        RD                  RF                  S9nU R4                  S-   nSn[7        U R8                  XxXdUUUU5	      nU RI                  XPRJ                  UUUX«U5         U R                  R                  S U RJ                  UUUU[;        U
5      [;        U5      U5	      I S	h  v•N nUS"   nUS#   n[!        US$   5      n[!        US%   5      n[!        US&   5      n[U        XxXdUUUSU5	      nUU RV                  :w  a¿  U R                  RY                  S'U R*                  R,                  [        [        RZ                  " U5      R]                  5       5      [        [        RZ                  " U RV                  5      R]                  5       5      S(9  ['        S)S*R)                  U R*                  R,                  5      5      eU R4                  S-   U:w  a>  ['        S+S,R)                  U R*                  R,                  U R4                  US#   5      5      eU R.                  U
-
  U:w  aA  ['        S+S-R)                  U R*                  R,                  U R.                  U
-
  US%   5      5      eUU l        UU l        U R_                  XPRV                  UUUUUU5        US.   n[B        R`                  Rc                  U R<                  5      n URe                  U5      n[B        Rj                  Rm                  U5      U R                  U'   U Ro                  5       n U R                  Rq                  S1U R*                  R,                  [        S2S3S49[        [        R                  " US95      [        [        [#        US-  5      5      S5-   S3S49[        [        RZ                  " US6   5      R]                  5       5      [        [#        US-  5      5      [        [#        US-  5      5      [        [        RZ                  " U5      R]                  5       5      U S79
  Sn!U R                  U   SL a‹  U!S8-  (       aO  U R                  R                  S9U R*                  R,                  [        [        R                  " US95      S:9  U!S-  n![r        Rt                  " S;5      I S	h  v•N   U R                  U   SL a  M‹  [w        U R                  U   [P        5      (       a  U R                  U   nUe U R                  U   Re                  U5      n" [x        Rz                  " U"5      n#U#$  GNµ GN÷ GNu! [&         a'  nURL                  S:X  a  U RO                  5         UeS	nAf[P         aK  nU R                  RM                  S!5        U R                  RS                  5         UU R                  U'   UeS	nAff = f! [B        Rf                  Rh                   aD  nUU R                  U'   ['        S/S0R)                  U R*                  R,                  U5      5      eS	nAff = f GNy! [B        Rf                  Rh                   a5  n['        S/S<R)                  U R*                  R,                  U5      5      eS	nAff = f! [x        R|                  R~                   a5  n['        S=S>R)                  U R*                  R,                  U5      5      eS	nAff = f7f)?aç  
Decrypt XBR data. This functions will potentially make the buyer call the
XBR market maker to buy data encryption keys from the XBR provider.

:param key_id: ID of the data encryption used for decryption
    of application payload.
:type key_id: bytes

:param serializer: Application payload serializer.
:type serializer: str

:param ciphertext: Ciphertext of encrypted application payload to
    decrypt.
:type ciphertext: bytes

:return: Decrypted application payload.
:rtype: object
r_   )ÚcborÚ
market_oidr^   r   Úverifying_chain_idÚverifying_contract_adrr	   Nz>Key {key_id} already in key store (or currently being bought).r`   )r   z1Key {key_id} not yet in key store - buying key ..Fzxbr.marketmaker.get_quoteÚpricez-Key {key_id} has current price quote {amount}l     ÈNÎZo)r   r   zxbr.error.max_price_exceededzR{}.unwrap() - key {} needed cannot be bought: price {} exceeds maximum price of {}r   Tz‚auto-closing payment channel {channel_oid} [close_seq={close_seq}, close_balance={close_balance}, close_is_final={close_is_final}])r^   Ú	close_seqÚclose_balanceÚclose_is_finalzxbr.marketmaker.close_channelzxbr.error.channel_closedzu{}.unwrap() - key {} cannot be bought: payment channel {} ran empty and we initiated close at remaining balance of {}zxbr.error.insufficient_balancez_{}.unwrap() - key {} cannot be bought: insufficient balance {} in payment channel for amount {})Úencoderzxbr.marketmaker.buy_keyz8Encountered error while calling market maker to buy key!r   r   Úamount_paidrb   r~   zv{klass}.unwrap()::XBRSIG[8/8] - EIP712 signature invalid: signer_address={signer_address}, delegate_adr={delegate_adr})ÚklassÚsigner_addressÚdelegate_adrzxbr.error.invalid_signaturezQ{}.unwrap()::XBRSIG[8/8] - EIP712 signature invalid or not signed by market makerzxbr.error.invalid_transactionz^{}.buy_key(): invalid transaction (channel sequence number mismatch - expected {}, but got {})z_{}.buy_key(): invalid transaction (channel remaining amount mismatch - expected {}, but got {})Ú
sealed_keyzxbr.error.decryption_failedz6{}.unwrap() - could not unseal data encryption key: {}zÌ{klass}.unwrap() - {tx_type} key {key_id} bought for {amount_paid} [payment_channel={payment_channel}, remaining={remaining}, inflight={inflight}, buyer_pubkey={buyer_pubkey}, transactions={transactions}]z
XBR BUY   Úmagenta)Úcolorz XBRrƒ   )	r”   Útx_typer   r“   rƒ   rb   r~   Úbuyer_pubkeyÚtransactionséd   zG{klass}.unwrap() - waiting for key "{key_id}" currently being bought ..)r”   r   gš™™™™™É?z1{}.unwrap() - failed to unwrap encrypted data: {}z xbr.error.deserialization_failedz;{}.unwrap() - failed to deserialize application payload: {})@r5   r6   r7   re   rN   r>   rg   Úa2b_hexrQ   r<   rf   r
   rl   rm   rR   rj   r   r9   rM   r   r8   Ú	__class__r)   rO   rT   Úpast_transactionsrP   r   r?   r   rL   rE   ÚencoderI   ÚencodingÚ
RawEncoderÚ_save_transaction_phase1rG   Úerrorrw   rk   Úfailurer   r=   Úwarnrh   ri   Ú_save_transaction_phase2rJ   Ú	SealedBoxÚdecryptÚ
exceptionsÚCryptoErrorÚsecretÚ	SecretBoxÚcount_transactionsrp   r:   Úsleeprd   Úcbor2ÚloadsÚdecoderÚCBORDecodeError)$r   r   Ú
serializerÚ
ciphertextr‹   r^   Úcurrent_block_numberrŒ   r�   Úquoter   r   Úlast_txÚtxnsr�   r�   r‘   r   r›   r   Úis_finalÚreceiptÚeÚmarketmaker_signatureÚmarketmaker_channel_seqÚmarketmaker_amount_paidÚmarketmaker_remainingÚmarketmaker_inflightr•   r—   Ú
unseal_boxÚkeyÚtransactions_countÚlog_counterÚmessageÚpayloads$                                       r   ÚunwrapÚSimpleBuyer.unwrap  s  é € ô& �F‹|œuÓ$¬¨V«¸Ó):Ð:Ð:ä�JÓ¤3Ó&¨:¸Ó+AÐAÐAÜ�JÓ¤5Ó(Ð(Ð(à—]‘] <Ñ0ˆ
Ø—m‘m MÑ2ˆð  !ÐØ!×/Ñ/Ð0DÑEÐÜ!)×!1Ò!1°$×2DÑ2DÐE]Ñ2^Ð_`Ð_aÐ2bÓ!cÐð —Z‘ZÓØ�H‰H�N‰NÐ[Ü"$¤T§Y¢Y°VÑ%<Ó"=ð ó ?ð �H‰H�N‰NÐNÔWYÔZ^×ZcÒZcÐjpÑZqÓWrˆNÑsð "'ˆD�J‰J�vÑð Ÿ-™-×,Ñ,Ð-HÈ&ÓQ×QˆEô $ E¨'¡NÓ3ˆFà�H‰H�N‰NÐJÜ"$¤T§Y¢Y°VÑ%<Ó"=ÄbÌÈVÐV\É_ÓI]ÓF^ð ñ `ð Ÿ™Ó'Ü&Ð'EØ'{÷  (Cñ  (Cð  DH÷  DRñ  DR÷  D[ñ  D[ô  ]a÷  ]fò  ]fð  msñ  ]tô  vyð  z@ð  CKñ  zKó  vLô  NQð  RV÷  Rañ  Rað  dlñ  Rló  Nmó  (nóoð oð —m‘m fÑ,ˆGØ˜Œ{Ø×+×+Ð+à"�GØ×1Ñ1Ó3�DÞØ"& q¡'˜æð %)§I¡I˜	Ø(,¯©˜Ø)-˜ä$=¸d¿n¹nØ>PØ>TØ>RØ>HØ>IØ>GØ>KØ>Ló%N˜	ð Ÿ™Ÿ™ð  (lÜ37·9²9À;Ñ3OØ1:Ü58¸ÈÑ9OÓ5PØ6Dð	 'ñ Fð #Ÿm™m×0Ñ0Ð1PØ1<Ø1CØ1EØ1GÜ1=¸mÓ1LØ1:Ø1?Ø1:ó<÷ <ð <ô /Ð/Ið 0g÷  0nñ  0nð  os÷  o}ñ  o}÷  oFñ  oFô os÷  oxò  oxð  Eñ  oFð ozô orð  s@ð  CKñ  sKó  oLó0MóNð Nô
 'Ð'Gð (I÷  (Pñ  (Pð  QU÷  Q_ñ  Q_÷  Qhñ  Qhô QU÷  QZò  QZð  agñ  Qhô QTð  UY÷  Ubñ  Ubð  emñ  Umó  Qnô QTð  U[ð  ^fñ  Ufó  Qgó(hóið ið  ×,Ñ,×7Ñ7×>Ñ>ÄtÇ}Á}×G_ÑG_Ð>Ð`ˆLØŸ)™) a™-ˆKØˆHô 2°$·.±.ÐBTØ2FÐT_ÐalØ29¸8óEˆIð
 ×)Ñ)¨+·z±zÀ<ÐQWÐYdÐflð  xAô  BðØ $§¡× 2Ñ 2Ð3LØ37·:±:Ø3?Ø39Ø3>Ø3>Ü3?ÀÓ3GÜ3?ÀÓ3HØ3<ó!>÷ >�ð( %,¨KÑ$8Ð!Ø&-¨mÑ&<Ð#Ü&4°W¸]Ñ5KÓ&LÐ#Ü$2°7¸;Ñ3GÓ$HÐ!Ü#1°'¸*Ñ2EÓ#FÐ ä9Ð:LØ:NÐ\gØ:QÐShØ:?ÐAVóXˆNð  ×!7Ñ!7Ó7Ø—‘—‘ð  WØ$(§N¡N×$;Ñ$;Ü-/´×0@Ò0@ÀÓ0P×0WÑ0WÓ0YÓ-ZÜ+-¬h×.>Ò.>¸t×?UÑ?UÓ.V×.]Ñ.]Ó._Ó+`ð ñ bô 'Ð'DØ'z÷  (Bñ  (Bð  CG÷  CQñ  CQ÷  CZñ  CZó  ([ó\ð \ð �y‰y˜1‰}Ð 7Ó7Ü&Ð'Fð (H÷  (Oñ  (Oð  PT÷  P^ñ  P^÷  Pgñ  Pgð  im÷  irñ  irð  t{ð  |Iñ  tJó  (KóLð Lð �}‰}˜vÑ%Ð)>Ó>Ü&Ð'Fð (I÷  (Pñ  (Pð  QU÷  Q_ñ  Q_÷  Qhñ  Qhð  jn÷  jwñ  jwð  z@ñ  j@ð  BIð  JUñ  BVó  (WóXð Xð 0ˆDŒIØ1ˆDŒMð ×)Ñ)¨+×7MÑ7MÈ|Ð]cÐe|Ø*AÐCXÐZoôqð ! Ñ.ˆJÜŸ™×.Ñ.¨t×/@Ñ/@ÓAˆJðcØ ×(Ñ(¨Ó4�ô "&§¡×!6Ñ!6°sÓ!;ˆD�J‰J�vÑà!%×!8Ñ!8Ó!:ÐØ�H‰H�M‰Mð _Ø—n‘n×-Ñ-Ü˜<¨yÑ9Üœ$Ÿ)š)¨&Ñ1Ó2Üœs¤3Ð'>ÀÑ'IÓ#JÓKÈfÑTÐ\eÑfÜ "¤8×#3Ò#3°GÐ<MÑ4NÓ#O×#VÑ#VÓ#XÓ YÜœSÐ!6¸Ñ!AÓBÓCÜœCÐ 4°xÑ ?Ó@ÓAÜ¤× 0Ò 0°Ó >× EÑ EÓ GÓHØ/ð ñ 
1ð ˆØ�j‰j˜Ñ  EÒ)Ø˜S× Ø—‘—‘ÐhØ%)§^¡^×%<Ñ%<ÄRÌÏ	Ê	ÐX^ÑH_ÓE`ð ñ bà˜qÑ �Ü—+’+˜b“/×!Ð!ð �j‰j˜Ñ  EÔ)ô �d—j‘j Ñ(¬)×4Ñ4Ø—
‘
˜6Ñ"ˆAØˆGð	ZØ—j‘j Ñ(×0Ñ0°Ó<ˆGð	iÜ—k’k 'Ó*ˆGð
 ˆòI Ròf<òJ>øô $ó Ø—7‘7Ð8Ó8Ø—I‘I”KØ�ûÜó Ø—‘—‘ÐYÔZØ—‘× Ñ Ô"Ø%&�—
‘
˜6Ñ"Ø�ûð	ûôZ —?‘?×.Ñ.ó cØ%&�—
‘
˜6Ñ"Ü&Ð'DÐF~÷  GFñ  GFð  GK÷  GUñ  GU÷  G^ñ  G^ð  `aó  Gbó  cð  cûðcúò6 "øô �‰×*Ñ*ó 	Zä"Ð#@ÐBu×B|ÑB|ð  ~B÷  ~Lñ  ~L÷  ~Uñ  ~Uð  WXó  CYó  Zð  Zûð	Zûô �}‰}×,Ñ,ó 	iä"Ð#Eð  HE÷  HLñ  HLð  MQ÷  M[ñ  M[÷  Mdñ  Mdð  fgó  Hhó  ið  iûð	iüsä   ‚Ej.Åd
ÅG j.ÌdÌEj.ÑAd ÒdÒd Ò Hj.Ú7f ÛF>j.âg?âj.â3j.ãh ã2i äj.äj.äd ä
fä"d?ä?fåAfæfæj.æg<æ8?g7ç7g<ç<j.èiè 0iéiéj.éj+é60j&ê&j+ê+j.c	           
      ó  • X@R                   ;   a.  [        SR                  [        R                  " U5      5      5      e[        XX4XVXx5      n	[        U R                  5      n
U R                  R                  U	S/5        X R                   U'   g)ú�

:param channel_oid:
:param delegate_adr:
:param buyer_pubkey:
:param key_id:
:param channel_seq:
:param amount:
:param balance:
:param signature:
:return:
z;save_transaction_phase1: duplicate transaction for key 0x{}N)	rU   ÚRuntimeErrorr8   rg   rh   r   r7   rV   Úappend)r   r^   r–   r›   r   r   r   r   r   Útx1Úkey_idxs              r   r¤   Ú$SimpleBuyer._save_transaction_phase1  s{   € ð ×*Ñ*Ó*ÜÐ\×cÑcÔdl×dtÒdtÐu{Ód|Ó}Ó~Ð~ä˜+°\È;Ð`gÓsˆä�d×(Ñ(Ó)ˆØ×Ñ×!Ñ! 3¨ +Ô.Ø(/×Ñ˜fÒ%r    c	           
      ó  • X@R                   ;  a.  [        SR                  [        R                  " U5      5      5      eU R                   U   n	U R
                  U	   S   (       a.  [        SR                  [        R                  " U5      5      5      eU R
                  U	   S   n
[        XX4XVXx5      nU
R                  UR                  :X  d   eU
R                  UR                  :X  d   eU
R                  UR                  :X  d   eU
R                  UR                  :X  d   eU
R                  UR                  :X  d   eU
R                  UR                  :X  d   eU
R                  UR                  :w  d   eX°R
                  U	   S'   g)rÌ   z;save_transaction_phase2: transaction for key 0x{} not foundr   z;save_transaction_phase2: duplicate transaction for key 0x{}r   N)rU   rÍ   r8   rg   rh   rV   r   r   r   r   r   r   r   r   )r   r^   r–   r›   r   r   r   r   r   rÐ   rÏ   Útx2s               r   r¨   Ú$SimpleBuyer._save_transaction_phase2  sX  € ð ×.Ñ.Ó.ÜÐ\×cÑcÔdl×dtÒdtÐu{Ód|Ó}Ó~Ð~à×'Ñ'¨Ñ/ˆà×Ñ˜gÑ& q×)ÜØM×TÑTÔU]×UeÒUeÐflÓUmÓnópð pð × Ñ  Ñ)¨!Ñ,ˆÜ˜+°\È;Ð`gÓsˆà�{‰{˜cŸk™kÓ)Ð)Ð)à�z‰z˜SŸZ™ZÓ'Ð'Ð'Ø�z‰z˜SŸZ™ZÓ'Ð'Ð'Ø�‰ #§/¡/Ó1Ð1Ð1Ø�z‰z˜SŸZ™ZÓ'Ð'Ð'Ø�{‰{˜cŸk™kÓ)Ð)Ð)ð �}‰} §¡Ó-Ð-Ð-à),×Ñ˜7Ñ# AÒ&r    c                 óB  • [        U5      [        :X  d   e[        U5      [        :X  a  US:”  d   eSn/ nX2:  ae  [        U R                  5      U:”  aB  U R                  U*    nU(       a  US   (       a   US   (       a  UR                  U5        US-  nO U$ X2:  a  Me  U$ )z1

:param filter_complete:
:param limit:
:return:
r   r   )r5   Úboolr9   r7   rV   rÎ   )r   Úfilter_completeÚlimitÚnr"   Útxs         r   r    ÚSimpleBuyer.past_transactionsB  s�   € ô �OÓ$¬Ó,Ð,Ð,Ü�E‹{œcÓ! e¨a£iÐ/Ð/àˆØˆØ‹iÜ�4×%Ñ%Ó&¨Ó*Ø×'Ñ'¨¨Ñ+�Þ&¨2¨a¯5°R¸·UØ—J‘J˜r”NØ˜‘F�AøàØˆ
ð �ið ˆ
r    c                 óŽ   • SSS.nU R                    H/  u  p#U(       a  U(       a  US==   S-  ss'   M"  US==   S-  ss'   M1     U$ )z

:return:
r   )ÚcompleteÚpendingrÝ   r   rÞ   )rV   )r   r"   rÏ   rÓ   s       r   r¯   ÚSimpleBuyer.count_transactionsX  sM   € ð Øñ
ˆð ×*Ô*‰HˆCÞ–sØ�J“ 1Ñ$•à�I“ !Ñ#•ñ	 +ð
 ˆ
r    c                 óh   • U R                   R                  US5      nU(       a  U R                  U   $ g)ú

:param key_id:
:return:
N©rU   ÚgetrV   )r   r   Úidxs      r   Úget_transactionÚSimpleBuyer.get_transactionh  s5   € ð ×#Ñ#×'Ñ'¨°Ó5ˆÞØ×%Ñ% cÑ*Ð*ð r    c                 ó‚   • U R                   R                  US5      nU(       a  U R                  U   u  p4U=(       a    U$ g)rá   NFrâ   )r   r   rä   rÏ   rÓ   s        r   Úis_completeÚSimpleBuyer.is_completer  s>   € ð ×#Ñ#×'Ñ'¨°Ó5ˆÞØ×)Ñ)¨#Ñ.‰HˆCØ—;˜3ÐØr    )rD   rG   rT   rO   rH   rN   rn   rQ   r=   rM   rC   r?   rL   rS   rP   rR   rU   rV   r>   r<   r   )Tr   )r)   r*   r+   r,   Ú__doc__r<   r   rt   rw   r   r„   r‡   rÉ   r¤   r¨   r    r¯   rå   rè   r-   r.   r    r   r0   r0   N   sU   † ñð €CòC òJ8òt5òô"ô>òoòb0ò,$-ôLò,ò +õ
r    r0   )rl   rg   Úpprintr   r   r±   Únacl.secretrI   Ú
nacl.utilsÚnacl.exceptionsÚnacl.publicr:   Úautobahn.wamp.exceptionr   Úautobahn.wamp.protocolr   Ú_utilr   r   r@   Úutilr
   r   Ú_eip712_channel_closer   r   Úobjectr   r0   r.   r    r   Ú<module>rö      sQ   ðó6 Û Ý ã 	Û Û Û Û Û ã Ý 4Ý 5ß /ã ç ß Zô'�&ô 'ô:n�&õ nr    