§
    Ìtºf	m  ã                   óâ   — d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlZd dl	Zd dl
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ZddlmZmZ dd	lmZmZ  G d
„ de¦  «        Z G d„ de¦  «        ZdS )é    N)Úpformat)ÚApplicationError)ÚApplicationSessioné   )Úunpack_uint256Úpack_uint256é   )ÚhlÚhlval)Úsign_eip712_channel_closeÚrecover_eip712_channel_closec                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚTransactionc	                 óv   — || _         || _        || _        || _        || _        || _        || _        || _        d S ©N©ÚchannelÚdelegateÚpubkeyÚkey_idÚchannel_seqÚamountÚbalanceÚ	signature)	Úselfr   r   r   r   r   r   r   r   s	            úR/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/xbr/_buyer.pyÚ__init__zTransaction.__init__3   s?   € ØˆŒØ ˆŒØˆŒØˆŒØ&ˆÔØˆŒØˆŒØ"ˆŒˆˆó    c           	      ól   — | j         | j        | j        | j        | j        | j        | j        | j        dœ}|S )Nr   r   )r   Úress     r   ÚmarshalzTransaction.marshal=   s>   € à”|ØœØ”kØ”kØÔ+Ø”kØ”|Øœð	
ð 	
ˆð ˆ
r   c                 óD   — t          |                      ¦   «         ¦  «        S r   )r   r!   ©r   s    r   Ú__str__zTransaction.__str__J   s   € Ý�t—|’|‘~”~Ñ&Ô&Ð&r   N)Ú__name__Ú
__module__Ú__qualname__r   r!   r$   © r   r   r   r   1   sA   € € € € € ð#ð #ð #ðð ð ð'ð 'ð 'ð 'ð 'r   r   c                   ój   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zdd„Z	dd„Z
d	„ Zd
„ Zd„ Zdd„Zd„ Zd„ Zd„ ZdS )ÚSimpleBuyerz®
    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                 óF  — t          |¦  «        t          k    rt          |¦  «        dk    sJ d                     |¦  «        ¦   «         ‚t          |¦  «        t          k    rt          |¦  «        dk    sJ d                     |¦  «        ¦   «         ‚t          |¦  «        t          k    r|dk    sJ ‚t          j        ¦   «         | _        || _        d| _	        || _
        t          j                             |¦  «        | _        d| _        | j        j                             ¦   «         | _        d| _        t(          j        j                             ¦   «         | _        || _        d| _        d| _        d| _        i | _        d| _        d| _        d| _        i | _         g | _!        dS )	a  

        :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   zSimpleBuyer.__init__U   s±  € õ Ð$Ñ%Ô%­Ò.Ð.µ3Ð7GÑ3HÔ3HÈBÒ3NÐ3NÐ3Nð  QC÷  QJò  QJð  K[ñ  Q\ô  Q\Ñ3NÔ3NÐ3NÝ�I‰Œ¥%Ò'Ð'­C°	©N¬N¸bÒ,@Ð,@Ð,@ÐBr×ByÒByð  {Dñ  CEô  CEÑ,@Ô,@Ð,@Ý�I‰Œ¥#Ò%Ð%¨)°aª-¨-¨-¨-åÔ$Ñ&Ô&ˆŒð "2ˆÔØ!ˆÔð #ˆŒõ ”]×-Ò-¨iÑ8Ô8ˆŒ
ð
 ˆŒ
ð ”ZÔ*×?Ò?ÑAÔAˆŒ
ð
 ˆŒõ !œKÔ2×;Ò;Ñ=Ô=ˆÔð $ˆŒð ˆŒð ˆŒð ˆŒ	ð ˆŒ
ØˆŒØˆŒð $(ˆÔ ð !#ˆÔØˆÔÐÐr   c           	   ƒ   ó>  K  — t          |t          ¦  «        sJ ‚t          |¦  «        t          k    sJ ‚| j        rJ ‚|| _        d| _        | j                             dt          | j	        ¦  «        t          j        | j        j        dd…         ¦  «                             ¦   «         ¬¦  «         	 |                     d¦  «        ƒ d{V —†| _        t          | j        ¦  «        t$          k    rt'          | j        ¦  «        dk    sJ ‚|                     d| j        ¦  «        ƒ d{V —†| _        | j        st+          d	¦  «        ‚| j        d
         }t          |¦  «        t$          k    rt'          |¦  «        dk    sJ ‚t-          j        |¬¦  «        | _        |                     d| j        j        ¦  «        ƒ d{V —†}n#  |                     ¦   «          ‚ xY wt          |d         ¦  «        t$          k    rt5          |d         ¦  «        |d<   |d         dk    st+          d¦  «        ‚|d         | _        |d         | _        | j                             dt          | j        ¦  «        t=          | j        ¦  «        t=          | j        ¦  «        ¬¦  «         | j        S )a–  
        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é
   )Úaddressr>   zxbr.marketmaker.get_configr,   z*xbr.marketmaker.get_active_payment_channelzno active payment channel foundÚchannel_oidé   ©r/   ú+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}])rV   rZ   r[   )Ú
isinstancer   r.   ÚstrrL   rK   r5   Údebugr
   rA   ÚbinasciiÚb2a_hexr<   r>   ÚdecodeÚcallr7   r@   r/   r0   rG   Ú	ExceptionÚuuidÚUUIDÚ_channel_oidÚleaver   rH   rI   Úinfor   )r   ÚsessionÚconsumer_idrV   Úpayment_balances        r   ÚstartzSimpleBuyer.startš   s¢  è è € õ ˜'Õ#5Ñ6Ô6Ð6Ð6Ð6Ý�KÑ Ô ¥CÒ'Ð'Ð'Ð'Ø”=Ð Ð Ð àˆŒØˆŒàŒ�ŠÐlÝ! $¤+™œÝ"*Ô"2°4´:Ô3HÈÈ"ÈÔ3MÑ"NÔ"N×"UÒ"UÑ"WÔ"Wð 	ñ 	Yô 	Yð 	Yð	Ø'.§|¢|Ð4PÑ'QÔ'QÐ!QÐ!QÐ!QÐ!QÐ!QÐ!QˆDÔõ ˜œ
Ñ#Ô#¥uÒ,Ð,µ°T´Z±´ÀBÒ1FÐ1FÐ1FÐ1FØ")§,¢,Ð/[Ð]aÔ]gÑ"hÔ"hÐhÐhÐhÐhÐhÐhˆDŒMØ”=ð CÝÐ AÑBÔBÐBàœ-¨Ô6ˆKÝ˜Ñ$Ô$­Ò-Ð-µ#°kÑ2BÔ2BÀbÒ2HÐ2HÐ2HÐ2HÝ $¤	°Ð <Ñ <Ô <ˆDÔð %,§L¢LÐ1^Ð`dÔ`qÔ`wÑ$xÔ$xÐxÐxÐxÐxÐxÐxˆOˆOøð	Ø�MŠM‰OŒOˆOØøøøõ � Ô,Ñ-Ô-µÒ6Ð6Ý+9¸/È+Ô:VÑ+WÔ+WˆO˜KÑ(à˜{Ô+¨aÒ/Ð/ÝÐOÑPÔPÐPà'¨Ô4ˆŒØ# EÔ*ˆŒ	àŒ�Šð  OÝ"$ TÔ%6Ñ"7Ô"7Å5ÈÌÑCWÔCWÕ]bÐcgÔclÑ]mÔ]mð 	ñ 	oô 	oð 	oð Œ}Ðs   Â1DF? Æ?Gc              ƒ   ó^   K  — | j         sJ ‚d| _         | j                             d¦  «         dS )z#
        Stop buying keys.
        FzOk, buyer delegate stopped.N)rL   r5   rh   r#   s    r   ÚstopzSimpleBuyer.stopÔ   s8   è è € ð Œ}ÐÐÐàˆŒàŒ�ŠÐ3Ñ4Ô4Ð4Ð4Ð4r   c              ƒ   ó¦   K  — | j         r| j                              ¦   «         sJ ‚| j                              d| j        d         ¦  «        ƒ d{V —†}|S )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
        rY   rV   N)rK   Úis_attachedrb   rG   )r   rk   s     r   r   zSimpleBuyer.balanceÞ   sc   è è € ð Œ}Ð< ¤×!:Ò!:Ñ!<Ô!<Ð<Ð<Ð<à $¤× 2Ò 2Ð3`ÐbfÔboÐp}Ôb~Ñ Ô ÐÐÐÐÐÐˆàÐr   c              ƒ   óø   K  — | j         r| j                              ¦   «         sJ ‚t          j        d¦  «        }| j                              d|| j        ||¦  «        ƒ d{V —†}|d         |d         |d         dœ}|S )z‰

        :param amount:
        :type amount:

        :param details:
        :type details:

        :return:
        :rtype:
        é@   z$xbr.marketmaker.open_payment_channelNr   rZ   Úinflight)r   rZ   rs   )rK   rp   ÚosÚurandomrb   r@   )r   Ú
buyer_addrr   Údetailsr   Úpayment_channelr   s          r   Úopen_channelzSimpleBuyer.open_channelï   s«   è è € ð Œ}Ð< ¤×!:Ò!:Ñ!<Ô!<Ð<Ð<Ð<õ ”J˜r‘N”Nˆ	à $¤× 2Ò 2Ð3YØ3=Ø37´:Ø39Ø3<ñ	!>ô !>ð >ð >ð >ð >ð >ð >ˆð & hÔ/Ø(¨Ô5Ø'¨
Ô3ð
ð 
ˆð ˆr   c              ƒ   ó
   K  — dS )z[
        Requests to close the currently active payment channel.

        :return:
        Nr(   )r   rw   s     r   Úclose_channelzSimpleBuyer.close_channel  s
   è è € € € r   c              ƒ   ó0  K  — t          |¦  «        t          k    rt          |¦  «        dk    sJ ‚t          |¦  «        t          k    r|dv sJ ‚t          |¦  «        t          k    sJ ‚| j        d         }| j        d         }d}| j        d         }t          j        | j        d         dd	…         ¦  «        }|| j        v r>| j	         
                    d
t          t          j        |¬¦  «        ¦  «        ¬¦  «         �n| j	         
                    dt          t          j        |¬¦  «        ¦  «        ¬¦  «         d| j        |<   | j                             d|¦  «        ƒ d	{V —†}	t!          |	d         ¦  «        }
| j	         
                    dt          t          j        |¬¦  «        ¦  «        t          t#          |
dz  ¦  «        ¦  «        ¬¦  «         |
| j        k    rht'          dd                     | j        j        t          j        |¬¦  «        t#          |
dz  ¦  «        t#          | j        dz  ¦  «        ¦  «        ¦  «        ‚| j        |
z
  }|dk     �rˆ| j        �rd	}|                      ¦   «         }|r|d         }|rö| j        }| j        }d}t7          | j        ||||||||¦	  «	        }| j	         
                    dt          j        |¬¦  «        |t#          |dz  ¦  «        |¬¦  «         | j                             d||||t;          |¦  «        |||¦	  «	        ƒ d	{V —† t'          dd                     | j        j        t          j        |¬¦  «        |t#          |dz  ¦  «        ¦  «        ¦  «        ‚t'          dd                     | j        j        t          j        |¬¦  «        t#          | j        dz  ¦  «        t#          |
dz  ¦  «        ¦  «        ¦  «        ‚| j        j                              tB          j"        j#        ¬¦  «        }| j        dz   }d}t7          | j        ||||||||¦	  «	        }|  $                    || j%        ||||
||¦  «         	 | j                             d | j%        ||||t;          |
¦  «        t;          |¦  «        |¦	  «	        ƒ d	{V —†}n# t&          $ r&}|j&        dk    r|  '                    ¦   «          |‚d	}~wtP          $ rD}| j	         &                    d!¦  «         | j	         )                    ¦   «          || j        |<   |‚d	}~ww xY w|d"         }|d#         }t!          |d$         ¦  «        }t!          |d%         ¦  «        }t!          |d&         ¦  «        }tU          |||||||d|¦	  «	        }|| j+        k    r¼| j	         ,                    d'| j        j        t          t          j-        |¦  «         .                    ¦   «         ¦  «        t          t          j-        | j+        ¦  «         .                    ¦   «         ¦  «        ¬(¦  «         t'          d)d*                     | j        j        ¦  «        ¦  «        ‚| j        dz   |k    r:t'          d+d,                     | j        j        | j        |d#         ¦  «        ¦  «        ‚| j        |
z
  |k    r=t'          d+d-                     | j        j        | j        |
z
  |d%         ¦  «        ¦  «        ‚|| _        || _        |  /                    || j+        ||||||¦  «         |d.         }tB          j0         1                    | j        ¦  «        }	 | 2                    |¦  «        }nT# tB          j3        j4        $ r=}|| j        |<   t'          d/d0                     | j        j        |¦  «        ¦  «        ‚d	}~ww xY wtB          j5         6                    |¦  «        | j        |<   |  7                    ¦   «         } | j	         8                    d1| j        j        t          d2d3¬4¦  «        t          t          j        |¬¦  «        ¦  «        t          t          t#          |dz  ¦  «        ¦  «        d5z   d3¬4¦  «        t          t          j-        |d6         ¦  «         .                    ¦   «         ¦  «        t          t#          |dz  ¦  «        ¦  «        t          t#          |dz  ¦  «        ¦  «        t          t          j-        |¦  «         .                    ¦   «         ¦  «        | ¬7¦
  «
         d}!| j        |         du rz|!d8z  rL| j	         
                    d9| j        j        t          t          j        |¬¦  «        ¦  «        ¬:¦  «         |!dz  }!ts          j:        d;¦  «        ƒ d	{V —† | j        |         du °ztw          | j        |         tP          ¦  «        r| j        |         }|‚	 | j        |          2                    |¦  «        }"nJ# tB          j3        j4        $ r3}t'          d/d<                     | j        j        |¦  «        ¦  «        ‚d	}~ww xY w	 ty          j=        |"¦  «        }#nJ# tx          j>        j?        $ r3}t'          d=d>                     | j        j        |¦  «        ¦  «        ‚d	}~ww xY w|#S )?aO  
        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
        rW   )ÚcborÚ
market_oidrV   r   Úverifying_chain_idÚverifying_contract_adrr	   Nz>Key {key_id} already in key store (or currently being bought).rX   )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}])rV   Ú	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_paidrZ   rs   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 XBRrx   )	r‡   Útx_typer   r†   rx   rZ   rs   Ú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: {})@r.   r/   r0   r]   rG   r7   r_   Úa2b_hexrJ   r5   r^   r
   rd   re   rK   rb   r   r2   rF   r   r1   Ú	__class__r%   rH   rM   Úpast_transactionsrI   r   r8   r   rE   r>   ÚencoderB   ÚencodingÚ
RawEncoderÚ_save_transaction_phase1r@   Úerrorrn   rc   Úfailurer   r6   Úwarnr`   ra   Ú_save_transaction_phase2rC   Ú	SealedBoxÚdecryptÚ
exceptionsÚCryptoErrorÚsecretÚ	SecretBoxÚcount_transactionsrh   r3   Úsleepr\   Úcbor2ÚloadsÚdecoderÚCBORDecodeError)$r   r   Ú
serializerÚ
ciphertextr~   rV   Ú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   ÚunwrapzSimpleBuyer.unwrap  s¤  è è € õ& �F‰|Œ|�uÒ$Ð$­¨V©¬¸Ò):Ð):Ð):Ð):å�JÑÔ¥3Ò&Ð&¨:¸Ð+AÐ+AÐ+AÐ+AÝ�JÑÔ¥5Ò(Ð(Ð(Ð(à”] <Ô0ˆ
Ø”m MÔ2ˆð  !ÐØ!Ô/Ð0DÔEÐÝ!)Ô!1°$Ô2DÐE]Ô2^Ð_`Ð_aÐ_aÔ2bÑ!cÔ!cÐð �T”ZÐÐØŒH�NŠNÐ[Ý"$¥T¤Y°VÐ%<Ñ%<Ô%<Ñ"=Ô"=ð ñ ?ô ?ð ?ñ ?ð ŒH�NŠNÐNÕWYÕZ^ÔZcÐjpÐZqÑZqÔZqÑWrÔWrˆNÑsÔsÐsð "'ˆDŒJ�vÑð œ-×,Ò,Ð-HÈ&ÑQÔQÐQÐQÐQÐQÐQÐQˆEõ $ E¨'¤NÑ3Ô3ˆFàŒH�NŠNÐJÝ"$¥T¤Y°VÐ%<Ñ%<Ô%<Ñ"=Ô"=ÅbÍÈVÐV\É_ÑI]ÔI]ÑF^ÔF^ð ñ `ô `ð `ð ˜œÒ'Ð'Ý&Ð'EØ'{÷  (Cò  (Cð  DHô  DRô  D[õ  ]aô  ]fð  msð  ]tñ  ]tô  ]tõ  vyð  z@ð  CKñ  zKñ  vLô  vLõ  NQð  RVô  Rað  dlñ  Rlñ  Nmô  Nmñ  (nô  (nñoô oð oð ”m fÑ,ˆGØ˜Š{‰{ØÔ+ñ 4Nà"�GØ×1Ò1Ñ3Ô3�DØð *Ø"& q¤'˜àð -Nð %)¤I˜	Ø(,¬˜Ø)-˜å$=¸d¼nØ>PØ>TØ>RØ>HØ>IØ>GØ>KØ>Lñ%Nô %N˜	ð œŸšð  (lÝ37´9À;Ð3OÑ3OÔ3OØ1:Ý58¸ÈÑ9OÑ5PÔ5PØ6Dð	 'ñ Fô Fð Fð #œm×0Ò0Ð1PØ1<Ø1CØ1EØ1GÝ1=¸mÑ1LÔ1LØ1:Ø1?Ø1:ñ<ô <ð <ð <ð <ð <ð <ð <ð <õ /Ð/Ið 0g÷  0nò  0nð  osô  o}ô  oFõ osô  oxð  Eð  oFñ  oFô  oFð ozõ orð  s@ð  CKñ  sKñ  oLô  oLñ0Mô 0MñNô Nð Nõ
 'Ð'Gð (I÷  (Pò  (Pð  QUô  Q_ô  Qhõ QUô  QZð  agð  Qhñ  Qhô  Qhõ QTð  UYô  Ubð  emñ  Umñ  Qnô  Qnõ QTð  U[ð  ^fñ  Ufñ  Qgô  Qgñ(hô (hñiô ið ið  Ô,Ô7×>Ò>ÅtÄ}ÔG_Ð>Ñ`Ô`ˆLØœ) a™-ˆKØˆHõ 2°$´.ÐBTÐVlØ2FÈ
ÐT_ÐalØ29¸8ñEô EˆIð
 ×)Ò)¨+°t´zÀ<ÐQWÐYdÐflÐnuð  xAñ  Bô  Bð  BðØ $¤× 2Ò 2Ð3LØ37´:Ø3?Ø39Ø3>Ø3>Ý3?ÀÑ3GÔ3GÝ3?ÀÑ3HÔ3HØ3<ñ!>ô !>ð >ð >ð >ð >ð >ð >��øõ $ð ð ð Ø”7Ð8Ò8Ð8Ø—I’I‘K”K�KØ�øøøøÝð ð ð Ø”—’ÐYÑZÔZÐZØ”× Ò Ñ"Ô"Ð"Ø%&�”
˜6Ñ"Ø�øøøøð	øøøð %,¨KÔ$8Ð!Ø&-¨mÔ&<Ð#Ý&4°W¸]Ô5KÑ&LÔ&LÐ#Ý$2°7¸;Ô3GÑ$HÔ$HÐ!Ý#1°'¸*Ô2EÑ#FÔ#FÐ å9Ð:LÐNdØ:NÐPZÐ\gØ:QÐShØ:?ÐAVñXô XˆNð  Ô!7Ò7Ð7Ø”—’ð  WØ$(¤NÔ$;Ý-/µÔ0@ÀÑ0PÔ0P×0WÒ0WÑ0YÔ0YÑ-ZÔ-ZÝ+-­hÔ.>¸tÔ?UÑ.VÔ.V×.]Ò.]Ñ._Ô._Ñ+`Ô+`ð ñ bô bð bõ 'Ð'DØ'z÷  (Bò  (Bð  CGô  CQô  CZñ  ([ô  ([ñ\ô \ð \ð Œy˜1‰}Ð 7Ò7Ð7Ý&Ð'Fð (H÷  (Oò  (Oð  PTô  P^ô  Pgð  imô  irð  t{ð  |Iô  tJñ  (Kô  (KñLô Lð Lð Œ}˜vÑ%Ð)>Ò>Ð>Ý&Ð'Fð (I÷  (Pò  (Pð  QUô  Q_ô  Qhð  jnô  jwð  z@ñ  j@ð  BIð  JUô  BVñ  (Wô  (WñXô Xð Xð 0ˆDŒIØ1ˆDŒMð ×)Ò)¨+°tÔ7MÈ|Ð]cÐe|Ø*AÐCXÐZoñqô qð qð ! Ô.ˆJÝœ×.Ò.¨tÔ/@ÑAÔAˆJðcØ ×(Ò(¨Ñ4Ô4��øÝ”?Ô.ð cð cð cØ%&�”
˜6Ñ"Ý&Ð'DÐF~÷  GFò  GFð  GKô  GUô  G^ð  `añ  Gbô  Gbñ  cô  cð  cøøøøðcøøøõ
 "&¤×!6Ò!6°sÑ!;Ô!;ˆDŒJ�vÑà!%×!8Ò!8Ñ!:Ô!:ÐØŒH�MŠMð _Ø”nÔ-Ý˜<¨yÐ9Ñ9Ô9Ý�$œ)¨&Ð1Ñ1Ô1Ñ2Ô2Ý�s¥3Ð'>ÀÑ'IÑ#JÔ#JÑKÔKÈfÑTÐ\eÐfÑfÔfÝ "¥8Ô#3°GÐ<MÔ4NÑ#OÔ#O×#VÒ#VÑ#XÔ#XÑ YÔ YÝ�SÐ!6¸Ñ!AÑBÔBÑCÔCÝ�CÐ 4°xÑ ?Ñ@Ô@ÑAÔAÝ¥Ô 0°Ñ >Ô >× EÒ EÑ GÔ GÑHÔHØ/ð ñ 
1ô 
1ð 
1ð ˆØŒj˜Ô  EÐ)Ð)Ø˜SÑ ð !Ø”—’ÐhØ%)¤^Ô%<ÅRÍÌ	ÐX^ÐH_ÑH_ÔH_ÑE`ÔE`ð ñ bô bð bà˜qÑ �Ý”+˜b‘/”/Ð!Ð!Ð!Ð!Ð!Ð!Ð!ð Œj˜Ô  EÐ)Ð)õ �d”j Ô(­)Ñ4Ô4ð 	Ø”
˜6Ô"ˆAØˆGð	ZØ”j Ô(×0Ò0°Ñ<Ô<ˆGˆGøÝŒÔ*ð 	Zð 	Zð 	Zå"Ð#@ÐBu×B|ÒB|ð  ~Bô  ~Lô  ~Uð  WXñ  CYô  CYñ  Zô  Zð  Zøøøøð	Zøøøð	iÝ”k 'Ñ*Ô*ˆGˆGøÝŒ}Ô,ð 	ið 	ið 	iå"Ð#Eð  HE÷  HLò  HLð  MQô  M[ô  Mdð  fgñ  Hhô  Hhñ  iô  ið  iøøøøð	iøøøð ˆsm   ÑAR" Ò"
TÒ,!SÓTÓ?TÔTÜ=] Ý^$Ý'8^Þ^$ç g, ç,h3è .h.è.h3è7i éjé .jêjc	           
      ó   — || j         v r4t          d                     t          j        |¦  «        ¦  «        ¦  «        ‚t          ||||||||¦  «        }	t          | j        ¦  «        }
| j                             |	dg¦  «         |
| j         |<   dS )úí

        :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)	rN   ÚRuntimeErrorr1   r_   r`   r   r0   rO   Úappend)r   rV   r‰   rŽ   r   r   r   r   r   Útx1Úkey_idxs              r   r—   z$SimpleBuyer._save_transaction_phase1  s˜   € ð �TÔ*Ð*Ð*ÝÐ\×cÒcÕdlÔdtÐu{Ñd|Ôd|Ñ}Ô}Ñ~Ô~Ð~å˜+ |°\À6È;ÐX^Ð`gÐirÑsÔsˆå�dÔ(Ñ)Ô)ˆØÔ×!Ò! 3¨ +Ñ.Ô.Ð.Ø(/ˆÔ˜fÑ%Ð%Ð%r   c	           
      ó–  — || j         vr4t          d                     t          j        |¦  «        ¦  «        ¦  «        ‚| j         |         }	| j        |	         d         r4t          d                     t          j        |¦  «        ¦  «        ¦  «        ‚| j        |	         d         }
t          ||||||||¦  «        }|
j        |j        k    sJ ‚|
j        |j        k    sJ ‚|
j	        |j	        k    sJ ‚|
j
        |j
        k    sJ ‚|
j        |j        k    sJ ‚|
j        |j        k    sJ ‚|
j        |j        k    sJ ‚|| j        |	         d<   dS )r¾   z;save_transaction_phase2: transaction for key 0x{} not foundr   z;save_transaction_phase2: duplicate transaction for key 0x{}r   N)rN   r¿   r1   r_   r`   rO   r   r   r   r   r   r   r   r   )r   rV   r‰   rŽ   r   r   r   r   r   rÂ   rÁ   Útx2s               r   r›   z$SimpleBuyer._save_transaction_phase2  sq  € ð ˜Ô.Ð.Ð.ÝÐ\×cÒcÕdlÔdtÐu{Ñd|Ôd|Ñ}Ô}Ñ~Ô~Ð~àÔ'¨Ô/ˆàÔ˜gÔ& qÔ)ð 	pÝØM×TÒTÕU]ÔUeÐflÑUmÔUmÑnÔnñpô pð pð Ô  Ô)¨!Ô,ˆÝ˜+ |°\À6È;ÐX^Ð`gÐirÑsÔsˆàŒ{˜cœkÒ)Ð)Ð)Ð)àŒz˜SœZÒ'Ð'Ð'Ð'ØŒz˜SœZÒ'Ð'Ð'Ð'ØŒ #¤/Ò1Ð1Ð1Ð1ØŒz˜SœZÒ'Ð'Ð'Ð'ØŒ{˜cœkÒ)Ð)Ð)Ð)ð Œ} ¤Ò-Ð-Ð-Ð-à),ˆÔ˜7Ô# AÑ&Ð&Ð&r   Tr   c                 óB  — t          |¦  «        t          k    sJ ‚t          |¦  «        t          k    r|dk    sJ ‚d}g }||k     rZt          | j        ¦  «        |k    r;| j        |          }|r|d         r"|d         r|                     |¦  «         |dz  }nn||k     °Z|S )zQ

        :param filter_complete:
        :param limit:
        :return:
        r   r   )r.   Úboolr2   r0   rO   rÀ   )r   Úfilter_completeÚlimitÚnr    Útxs         r   r“   zSimpleBuyer.past_transactionsB  s¾   € õ �OÑ$Ô$­Ò,Ð,Ð,Ð,Ý�E‰{Œ{�cÒ!Ð! e¨a¢i i i iàˆØˆØ�%ŠiˆiÝ�4Ô%Ñ&Ô&¨Ò*Ð*ØÔ'¨¨Ô+�Ø&ð ¨2¨a¬5ð °R¸´Uð Ø—J’J˜r‘N”N�NØ˜‘F�Aøàð �%Šiˆið ˆ
r   c                 ót   — dddœ}| j         D ]*\  }}|r|r|dxx         dz  cc<   Œ|dxx         dz  cc<   Œ+|S )z

        :return:
        r   )ÚcompleteÚpendingrÌ   r   rÍ   )rO   )r   r    rÁ   rÄ   s       r   r¢   zSimpleBuyer.count_transactionsX  sr   € ð Øð
ð 
ˆð Ô*ð 	$ð 	$‰HˆC�Øð $�sð $Ø�J��” 1Ñ$��‘�à�I��” !Ñ#��‘�Øˆ
r   c                 óZ   — | j                              |d¦  «        }|r| j        |         S dS )ú2

        :param key_id:
        :return:
        N©rN   ÚgetrO   )r   r   Úidxs      r   Úget_transactionzSimpleBuyer.get_transactionh  s<   € ð Ô#×'Ò'¨°Ñ5Ô5ˆØð 	+ØÔ% cÔ*Ð*ð	+ð 	+r   c                 óh   — | j                              |d¦  «        }|r| j        |         \  }}|o|S dS )rÏ   NFrÐ   )r   r   rÒ   rÁ   rÄ   s        r   Úis_completezSimpleBuyer.is_completer  sD   € ð Ô#×'Ò'¨°Ñ5Ô5ˆØð 	ØÔ)¨#Ô.‰HˆC�Ø�;˜3ÐØˆur   r   )Tr   )r%   r&   r'   Ú__doc__r5   r   rl   rn   r   ry   r{   r¼   r—   r›   r“   r¢   rÓ   rÕ   r(   r   r   r*   r*   N   s  € € € € € ðð ð €CðC ð C ð C ðJ8ð 8ð 8ðt5ð 5ð 5ðð ð ð"ð ð ð ð>ð ð ð ðoð oð oðb0ð 0ð 0ð,$-ð $-ð $-ðLð ð ð ð,ð ð ð +ð +ð +ð
ð 
ð 
ð 
ð 
r   r*   )rd   r_   Úpprintr   rt   r¤   Únacl.secretrB   Ú
nacl.utilsÚnacl.exceptionsÚnacl.publicr3   Úautobahn.wamp.exceptionr   Úautobahn.wamp.protocolr   Ú_utilr   r   r9   Úutilr
   r   Ú_eip712_channel_closer   r   Úobjectr   r*   r(   r   r   ú<module>râ      sS  ðð6 €€€Ø €€€Ø Ð Ð Ð Ð Ð à 	€	€	€	Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð à €€€Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à €€€à Ð Ð Ð Ð Ð Ð Ð Ø ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ ZÐ Zð'ð 'ð 'ð 'ð '�&ñ 'ô 'ð 'ð:nð nð nð nð n�&ñ nô nð nð nð nr   