
    ei{,                         d dl Zd dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ  G d d	ej        j                  ZdS )
    N)
ArrayCache)AnyInt	OrderBookTrade)Client)List)NotSupported)ChecksumErrorc            
            e Zd Zdef fdZddi fdedededee         fdZ	de
fd	Zdd
Zdi fdededefdZde
fdZd Zd Zd Zde
fdZde
fdZde
fdZ xZS )independentreservereturnc                     |                      t          t          |                                           ddddddddddd
dddiidddiii i d	          S )
NTF)
wswatchBalancewatchTickerwatchTickerswatchTradeswatchTradesForSymbolswatchMyTradeswatchOrderswatchOrderBook
watchOHLCVapir   z'wss://websockets.independentreserve.comr   checksum)hasurlsoptions	streaming
exceptions)deep_extendsuperr   describe)self	__class__s    Y/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/pro/independentreserve.pyr#   zindependentreserve.describe   s    &8$ ? ? H H J J %$ %#).!&$"&#  C !#
3M
 M
   	    Nsymbolsincelimitc                 B  K   |                                   d{V  |                     |          }|d         }| j        d         d         dz   |d         z   dz   |d         z   }d	|z   }|                     ||d|           d{V }|                     |||d
d          S )a  
        get the list of most recent trades for a particular symbol
        :param str symbol: unified symbol of the market to fetch trades for
        :param int [since]: timestamp in ms of the earliest trade to fetch
        :param int [limit]: the maximum amount of trades to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/?id=public-trades>`
        Nr(   r   r   z?subscribe=ticker-base-quotetrades:	timestampT)load_marketsmarketr   watchfilter_by_since_limit)	r$   r(   r)   r*   paramsr2   urlmessageHashtradess	            r&   watch_tradeszindependentreserve.watch_trades/   s       !!!!!!!!!V$$!it$';;fVnLsRU[\cUdd&(zz#{D+FFFFFFFF))&%TRRRr'   clientc                    |                      |di           }|                     |d          }|                     |d d          }d|z   }|                      | j        |          }|5|                     | j        dd          }t          |          }|| j        |<   |                     |          }	|                    |	           || j        |<   |	                    | j        |         |           d S )NDataPairr-   r/   tradesLimiti  )

safe_valuesafe_stringsafe_symbolr8   safe_integerr   r   parse_ws_tradeappendresolve)
r$   r:   messagedatamarketIdr(   r7   storedr*   trades
             r&   handle_tradesz independentreserve.handle_trades@   s    & w33##D&11!!(D#66&(f55>%%dlM4HHE&&F"(DK##D))e$Ft{6*K88888r'   c                    |                      |d          }|                      |d          }|                     ||                      |d          |                      |d          |                     ||d          |                     |d          d d |                      |d          |                      |d          d d |                     |          |d	|          S )
N	TradeDater=   	TradeGuidorderNor-   SidePriceVolume)infoidorderr(   sidetypetakerOrMakerpriceamountcostfeer0   datetime)r@   
safe_traderA   safe_string_lower	parse8601)r$   rJ   r2   r]   rH   s        r&   rC   z!independentreserve.parse_ws_tradea   s     ##E;77##FF33""5+66%%eY77&&x==**5&99 %%eW55&&uh7711  
  
   	r'   c                   K   |                                   d{V  |                     |          }|d         }|d}|                     |          }| j        d         d         dz   |z   dz   |d         z   d	z   |d
         z   }d|z   dz   |z   }ddi}|                     ||d||           d{V }	|	                                S )a  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
        :param str symbol: unified symbol of the market to fetch the order book for
        :param int [limit]: the maximum amount of order book entries to return
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/?id=order-book-structure>` indexed by market symbols
        Nr(   d   r   r   z/orderbook/z?subscribe=r,   r-   r.   
orderbook::receivedSnapshotF)r1   r2   number_to_stringr   r3   r*   )
r$   r(   r*   r5   r2   limitStringr6   r7   subscription	orderbooks
             r&   watch_order_bookz#independentreserve.watch_order_book   s       !!!!!!!!!V$$!=E++E22it$}4{B]RU[\bUccfiilrszl{{"V+c1K?
 **S+t[,WWWWWWWW	   r'   c           	         |                      |d          }|                      |d          }|                    d          }|                      |d          }|                      |d          }|                      |d          }|                     |          }	|                     |          }
|	dz   |
z   }|                     |di           }d|z   d	z   |z   }|                     |j        |i           }|                     |d
d          }|                     |d          }|| j        vr| 	                    i           | j        |<   | j        |         }|dk    r6| 
                    |||dddd          }|                    |           d|d
<   n|                     |dg           }|                     |dg           }|                     |d         |           |                     |d         |           ||d<   |                     |          |d<   |                     ddd          }|rx|ru|d         }|d         }t!          |          }t!          |          }d}t#          dd          D ]N}||k     rF||                     ||         d                   z   |                     ||         d                   z   }Ot#          dd          D ]N}||k     rF||                     ||         d                   z   |                     ||         d                   z   }O|                     |d          }|                     |d          }||k    rUt)          | j        dz   |                     |          z             }|j        |= | j        |= |                    ||           d S |r|                    ||           d S d S )NEventChannel/         r<   rc   rd   re   FTimeOrderBookSnapshotBidsOffersrQ   rR   Tasksbidsr0   r]   r   r    r   
   Crc32 )r@   splitsafe_currency_code	safe_dictr?   subscriptions	safe_boolrB   
orderbooks
order_bookparse_order_bookreset	safe_listhandle_deltasiso8601handle_optionlenrangevalue_to_checksumcrc32r   rT   orderbook_checksum_messagerejectrE   )r$   r:   rF   eventchannelpartsdepthbaseIdquoteIdr,   r.   r(   	orderBookr7   rh   re   r0   ri   snapshotrv   rw   r   
storedAsks
storedBids
asksLength
bidsLengthpayloadicalculatedChecksumresponseChecksumerrors                                  r&   handle_order_bookz$independentreserve.handle_order_book   s   .   '22""7I66c""  **!!%++""5!,,&&v..''00e#NN7FB77	"V+c1E9v';["MM>>,8JERR%%gv66	$/))&*oob&9&9DOF#OF+	''',,Y	6S[]dfnooHOOH%%%/3L+,,>>)Xr::D>>)VR88Dy0$777y0$777%.Ik"$(LL$;$;Ij!%%&6
DII 	( 	"6*J"6*JZJZJG1b\\ | |z>>%(>(>z!}Q?O(P(PPSWSiSijtuvjwxyjzS{S{{G1b\\ | |z>>%(>(>z!}Q?O(P(PPSWSiSijtuvjwxyjzS{S{{G!%GT!:!:#00GDD!%555%dgmd6U6UV\6]6]&]^^(5OF+e[111 	3NN9k22222	3 	3r'   c                     t          |d          }|                    dd          }|                     |          }|                     |          }|S )Nz.8f.rx   )formatreplaceparse_numberrf   )r$   valueresults      r&   r   z$independentreserve.value_to_checksum   sO    u%%R((""6**&&v..r'   c                 ^    |                      |dd          }|                    |           d S )NrQ   rR   )parse_bid_ask
storeArray)r$   booksidedeltabidAsks       r&   handle_deltazindependentreserve.handle_delta   s3    ##E7H==F#####r'   c                 ~    t          dt          |                    D ]}|                     |||                    d S )Nr   )r   r   r   )r$   r   deltasr   s       r&   r   z independentreserve.handle_deltas   sH    q#f++&& 	3 	3Ahq	2222	3 	3r'   c                     |S N r$   r:   rF   s      r&   handle_heartbeatz#independentreserve.handle_heartbeat   s	     r'   c                     |S r   r   r   s      r&   handle_subscriptionsz'independentreserve.handle_subscriptions   s	     r'   c                    |                      |d          }| j        | j        | j        | j        | j        d}|                     ||          }| |||           d S t          | j        dz   |                     |          z             )Nrl   )Subscriptions	Heartbeatr   rs   OrderBookChangez" received an unsupported message: )	r@   r   r   rK   r   r?   r
   rT   json)r$   r:   rF   r   handlershandlers         r&   handle_messagez!independentreserve.handle_message  s      '22!6.'!%!7#5
 
 //(E22GFG$$$F47%IIDIIV]L^L^^___r'   r   )__name__
__module____qualname__r   r#   strr   r	   r   r9   r   rK   rC   r   rj   r   r   r   r   r   r   r   __classcell__)r%   s   @r&   r   r      s       #      < <@d[] S S SS S Sbfglbm S S S S"9F 9 9 9 9B   > @DB ! !S ! !S\ ! ! ! !,J3 J3 J3 J3 J3X  $ $ $3 3 3v    6    `V ` ` ` ` ` ` ` `r'   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   ccxt.base.typesr   r   r   r   !ccxt.async_support.base.ws.clientr   typingr	   ccxt.base.errorsr
   r   async_supportr   r   r'   r&   <module>r      s        7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 4 4 4 4 4 4       ) ) ) ) ) ) * * * * * *C` C` C` C` C`+> C` C` C` C` C`r'   