
     f                    P   d dl mZ d dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ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 d d	lmZ d d
lmZ d dlm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dlm$Z$ d dl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e      Z,y)    )Exchange)ImplicitAPIN)BalancesCurrencyIntMarketNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickersTradeTradingFeeInterfaceTradingFeesTransaction)List)ExchangeError)AuthenticationError)PermissionDenied)ArgumentsRequired)
BadRequest)	BadSymbol)InsufficientFunds)InvalidAddress)InvalidOrder)DuplicateOrderId)NotSupported)RateLimitExceeded)InvalidNonce)	TICK_SIZE)Precisec                       e Zd Z fdZi fdZi fdee   fdZi fdZi fdZ	dSde
d	edefd
Zi fdedefdZdi fdedefdZdi fdededefdZdSde
d	edefdZddi fdedededee   fdZdSd	edefdZdddi fdedededee   fdZdefdZi fdefdZdSde
d	edefdZi fdedefdZ i fde!fdZ"i fdede#fdZ$di fded e%d!e&d"e#d#e'f
d$Z(d%e)fd&Z*dSd'e
d	ede+fd(Z,di fd)ede)fd*Z-di fd)ede)fd+Z.di fd)ede)fd,Z/dddi fde)dedefd-Z0dddi fde)dededee+   fd.Z1dddi fde)dededee+   fd/Z2di fd)ede)fd0Z3di fde)fd1Z4d2 Z5i fd3efd4Z6i fd3efd5Z7i fd3efd6Z8di fd3ed"e#d7ede9fd8Z:d9 Z;dSd:e
d;e<de9fd<Z=dddi fd3e)dededee9   fd=Z>dddi fd3e)dededee9   fd>Z?di fd?efd@Z@i fdAZAi fdBZBdi fd?efdCZCdi fdDZDdi fdEZEdSdFZFdSd;e<fdGZGdHdIi ddfdJZHdK ZIdLeJdMedNedOedPe
dQefdRZK xZLS )Tlbankc           )      j   | j                  t        t        |          dddgdddi ddd	dd
ddd ddddddddddddddddddddddddddi ddddddddddddddd d!d"dd#dd$dd%dd&dd'dd(dd)dd*di d+dd,dd-dd.dd/dd0dd1dd2dd3dd4dd5dd6dd7dd8dd9dd:dd;dddddddddddd<
d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSi dTdUdVdUdWdUdXdUdYdUdZdUd[dUd\dUd]dUd^dUd_dUd`dUdadUdbdUdcdUdddUdedUidfdgi dhdUdidUdjdUdkdUdldUdmdUdndodpdodqdodrdodsdUdtdUdudUdvdUdwdUdxdUdydUi dzdUd{dUd|dUd}dUd~dUddUddUddUddUd`dUddoddoddoddoddUddUddUdUdUdiddddUdUdUdUdiid| j	                  d      | j	                  d      ddxi iddddt
        ddddiddiddiddiddiddiddii dddddddddddddddddddddddddddddddddddddddddddddddddddidd      S )Nr'   LBankCNv2   TCORSFspotmarginswapfutureoption	addMargincancelAllOrderscancelOrdercreateMarketBuyOrderWithCostcreateMarketOrderWithCostcreateMarketSellOrderWithCostcreateOrdercreateReduceOnlyOrdercreateStopLimitOrdercreateStopMarketOrdercreateStopOrderfetchBalancefetchBorrowRateHistoriesfetchBorrowRateHistoryfetchClosedOrdersfetchCrossBorrowRatefetchCrossBorrowRatesfetchDepositAddressfetchDepositWithdrawFeeemulatedfetchDepositWithdrawFeesfetchFundingHistoryfetchFundingRatefetchFundingRateHistoryfetchFundingRatesfetchIndexOHLCVfetchIsolatedBorrowRatefetchIsolatedBorrowRatesfetchIsolatedPositionsfetchLeveragefetchLeverageTiersfetchMarginModefetchMarketsfetchMarkOHLCVfetchMyTrades
fetchOHLCVfetchOpenOrders
fetchOrderfetchOrderBookfetchOrdersfetchPositionfetchPositionModefetchPositionsfetchPositionsRiskfetchPremiumIndexOHLCVfetchTicker)
fetchTickers	fetchTimefetchTradesfetchTradingFeesfetchTransactionFeesreduceMarginsetLeveragesetMarginModesetPositionModewithdrawminute1minute5minute15minute30hour1hour2hour4hour6hour8hour12day1week1)1m5m15m30m1h2h4h6h8h12h1d1wzchttps://user-images.githubusercontent.com/1294454/38063602-9605e28a-3302-11e8-81be-64b1e53c4cfb.jpgzhttps://api.lbank.infozhttps://lbkperp.lbank.com)restcontractzhttps://api.lbkex.comzhttps://www.lbank.comz+https://www.lbank.com/en-US/docs/index.htmlzhhttps://support.lbank.site/hc/en-gb/articles/900000535703-Trading-Fees-From-14-00-on-April-7-2020-UTC-8-z'https://www.lbank.com/login/?icode=7QCY)logoapiapi2wwwdocfeesreferralcurrencyPairsg      @accuracyusdToCnywithdrawConfigs	timestampzticker/24hrtickerdepth	incrDepthtradesklinezsupplement/system_pingzsupplement/incrDepthzsupplement/tradeszsupplement/ticker/pricezsupplement/ticker/bookTickerzsupplement/system_status)getpostr   	user_infozsubscribe/get_keyzsubscribe/refresh_keyzsubscribe/destroy_keyget_deposit_addressdeposit_historycreate_order   batch_create_ordercancel_ordercancel_clientOrdersorders_infoorders_info_historyorder_transaction_detailtransaction_historyorders_info_no_dealrj   withdrawCancel	withdrawszsupplement/user_infozsupplement/withdrawzsupplement/deposit_historyzsupplement/withdrawszsupplement/get_deposit_addresszsupplement/asset_detailzsupplement/customer_trade_feezsupplement/api_Restrictionszsupplement/create_order_testzsupplement/create_orderzsupplement/cancel_orderz!supplement/cancel_order_by_symbolzsupplement/orders_infozsupplement/orders_info_no_dealzsupplement/orders_info_history)zsupplement/user_info_accountzsupplement/transaction_history)publicprivater   r   )zcfd/openApi/v1/pub/getTimezcfd/openApi/v1/pub/instrumentzcfd/openApi/v1/pub/marketDatazcfd/openApi/v1/pub/marketOrder)r.   r   z0.001)makertaker)tradingfundingVENPenta)	VET_ERC20PNTmethodspotPublicGetTradesfetchPrivateTransactionFeesfetchPrivateDepositWithdrawFeesfetchDepositAddressDefault$spotPrivatePostSupplementCreateOrderfetchOrderSupplement!spotPrivatePostSupplementUserInfoERC20erc20ETHTRC20trc20TRXOMNIomniASAasaBEP20
bep20(bsc)BSCHThecoBNBbep2BTCbtcDOGEdogecoinMATICmaticPOLYGONOECoecBTCTRONbtctronXRPxrp)r   r   r   r   r   bep20r   r   r   r   r   r   r   r   USDT)cacheSecretAsPem!createMarketBuyOrderRequiresPricerc   re   rG   rD   r9   rX   r>   networksinverse-networksdefaultNetworks)idname	countriesversion	rateLimitprohas
timeframesurlsr   r   commonCurrenciesprecisionModeoptions)deep_extendsuperr'   describeparse_numberr$   )self	__class__s    R/var/www/html/py/new-venv/lib/python3.12/site-packages/ccxt/async_support/lbank.pyr   zlbank.describe   s   eT ; = >>> %> 	>
 %> %> U> "4> t> /> ,U> 0> t> (> '>  (!>" "5#>$ %>& +E'>( )%)>* $U+>, '->. (/>0 &t1>2 *:3>4 +D5>6 &u7>8 #E9>: *5;>< $U=>> "5?>@ *5A>B +EC>D )%E>F  G>H %eI>J "5K>L M>N !%O>P  Q>R dS>T "4U>V dW>X !$Y>Z t[>\  ]>^ $U_>` !%a>b %ec>d )%e>f tg>h !%!#$((, %$!&#( {>@  !! ~4 ; 0.D CE +S &  '  .s	 
 (  *3  %c  $S  (  %c  $S  5c  3C  0   6s! " ;C# ( 7!)2  *!'*! 0*! 4S	*!
 4S*! 23*! .s*! +A*! 1!*! +A*! 21*! *3*! 23*! 7*!  23!*!" 23#*!& ''*!( -c)*!* (+*!, 3C-*!. 23/*!0 9#1*!2 3C3*!4 =c5*!6 6s7*!8 <S9*!: :3;*!> 5c?*!B ;AC*!D 6qE*!F 6qG*!H @I*!J 5cK*!L =cM*!N =cO*!P =@>AS*!, 3FP :==@=@>A	 	QRj "..w7!..w7
  #! '$(593  ;) ?- :( D  4 A!%W%7% W% 7	%
 F% 5% \% <% &% 6% 5% J% W% w% 5%  y!%" 5#%N %$" "'" !  &$ ( %" G$]QGU@
 U U	    c                    K   d}| j                  dd|      \  }}d}|dk(  r| j                  |       d{   }n| j                  |       d{   }| j                  |d      S 7 07 w)a  
        fetches the current integer timestamp in milliseconds from the exchange server
        :see: https://www.lbank.com/en-US/docs/index.html#get-timestamp
        :see: https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns int: the current integer timestamp in milliseconds from the exchange server
        Nrb   r0   data)handle_market_type_and_params'contractPublicGetCfdOpenApiV1PubGetTimespotPublicGetTimestampsafe_integer)r   paramstyperesponses       r   
fetch_timezlbank.fetch_time7  sv      99+tVTf6>!II&QQH!88@@H*   622/ R@s!   4A+A'A+A)A+)A+returnc                    K   | j                  |      | j                  |      g}t        j                  |  d{   }| j	                  |d   |d         S 7 w)ay  
        retrieves data on all markets for lbank
        :see: https://www.lbank.com/en-US/docs/index.html#trading-pairs
        :see: https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: an array of objects representing market data
        Nr   r   )fetch_spot_marketsfetch_swap_marketsasynciogatherarray_concat)r   r   marketsPromisesresolvedMarketss       r   fetch_marketszlbank.fetch_markets\  sa      ##F+##F+
 !( @@  !3_Q5GHH As   8AAAc                   K   | j                  |       d {   }| j                  |dg       }g }t        dt        |            D ]0  }||   }| j	                  |d      }|j                  d      }|d   }	|d   }
| j                  |	      }| j                  |
      }|dz   |z   }|j                  i d|d|d|d	|d
|	d|
dd dd dddddddddddddddddd d d d d d d | j                  | j                  | j	                  |d                  | j                  | j                  | j	                  |d                  dd d d| j                  |d      d dd d dd d ddd |d
       3 |S 7 ew) Nr   r   symbol_r   /r   basequotebaseIdquoteIdsettlesettleIdr   r.   Tr/   Fr0   r1   r2   activer   linearquantityAccuracypriceAccuracyamountpriceminmax
minTranQualeverager  r  cost
inversecontractSizeexpiryexpiryDatetimestrike
optionType	precisionlimitscreatedinfo)spotPublicGetAccuracy
safe_valuerangelensafe_stringsplitsafe_currency_codeappendr   parse_precisionsafe_number)r   r   r   r   resultimarketmarketIdpartsr  r  r
  r  r  s                 r   r   zlbank.fetch_spot_marketsk  sY    33F;;  x4q#d)$ 9	A!WF''9HNN3'E1XFAhG**62D++G4ECZ%'FMM 0h0&0 0 	0
 &0 70 $0 D0 0 0 %0 0 %0 %0 $0  E!0" $#0$   $"&""//0D0DTEUEUV\^pEq0rs!..t/C/CDDTDTU[]lDm/no  $#!
  $//E#
  $#
  $#$  _0 09	t Y <s   E?E<E%E?c                   K   ddi}| j                  | j                  ||             d {   }| j                  |dg       }g }t        dt	        |            D ]f  }||   }| j                  |d      }| j                  |d      }	| j                  |d      }
|
}| j                  |	      }| j                  |      }| j                  |
      }|dz   |z   d	z   |z   }|j                  i d
|d|d|d|d|d|	d|d|
ddddddddddddddddddd | j                  |d      d d d d | j                  |d      | j                  |d      dd d d | j                  |d!      | j                  |d"      d | j                  |d#      | j                  |d$      d | j                  |d%      d d d&d |d'
       i |S 7 w)(NproductGroupSwapUr   r   r  baseCurrencyclearCurrencyr	  :r   r
  r  r  r  r  r  r   r0   r.   Fr/   Tr1   r2   r  r   r  volumeMultiple
volumeTick	priceTickr  r  minOrderVolumemaxOrderVolumepriceLimitLowerValuepriceLimitUpperValueminOrderCostr  r  )	*contractPublicGetCfdOpenApiV1PubInstrumentextendr*  r+  r,  r-  r/  r0  r2  )r   r   requestr   r   r3  r4  r5  r6  r  r  r  r
  r  r  r  s                   r   r   zlbank.fetch_swap_markets  s    G
 HHU\^dIeff: x4q#d)$ :	A!WF''9H%%fn=F''@HG**62D++G4E,,X6FCZ%'#-6FMM 0h0&0 0 	0
 &0 &0 70 H0 0 0 %0 0 %0 %0 $0  D!0" $#0$   $ 0 09I J"&""..v|D!--fkB  $#!
  $//8HI#//8HI
  $//8NO#//8NO
  $//G#$  _0 0:	v u gs   )G	GFG	Nr   r5  c           	      f   | j                  |d      }| j                  |d      }| j                  ||      }| j                  |di       }| j	                  ||      }|d   r|n|}| j                  i d|d|d| j                  |      d| j                  |dd      d| j                  |dd	      d
d dd dd dd dd d| j                  |d      dd d| j                  |dd      dd dd d| j                  |d      dd | j                  |dd      | j                  |d      |d|      S )Nr   r  r   r   datetimehighhighestPricelowlowestPricebid	bidVolumeask	askVolumevwapopen	openPricecloselastlatest	lastPricepreviousClosechange
percentageaveragevolvolumeturnover)
baseVolumequoteVolumer(  )r   r-  safe_symbolr*  safe_marketsafe_tickeriso8601safe_string_2)r   r   r5  r   r6  r  
tickerDatar   s           r   parse_tickerzlbank.parse_ticker  s   > %%fk:	##FH5!!(F3__VXr:
!!(F3 ,v: !
f!
!
 Y/!
 D&&tV^D	!

 4%%dE=A!
 4!
 !
 4!
 !
 D!
 D$$T;7!
 T!
 D&&tX{C!
 T!
 d!
  $**4:!!
" t#!
$ ,,T5(C++D*=)!
* + 	r   r  c                   K   | j                          d{    | j                  |      }|d   r3| j                  |d   g|       d{   }| j                  ||d         S d|d   i}| j	                  | j                  ||             d{   }| j                  |dg       }| j                  |di       }| j                  ||      S 7 7 7 @w)a  
        fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
        :see: https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
        :param str symbol: unified symbol of the market to fetch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
        Nr0   r  r   r   r   )load_marketsr5  fetch_tickersr*  spotPublicGetTicker24hrrG  	safe_dictri  )	r   r  r   r5  responseForSwaprH  r   r   firsts	            r   fetch_tickerzlbank.fetch_tickerV  s      !!!V$&>$($6$6x8H7I6$RRO???F84DEEfTl
 55dkk'66RSS, x4tQ+  //A 	" S
 Ts4   CC3C
CACC=CCCsymbolsc                   K   | j                          d{    d}|5| j                  |      }t        |      }|dkD  r| j                  |d         }i }d}| j	                  d||      \  }}d}|dk(  r/d|d<   | j                  | j                  ||             d{   }n.d|d<   | j                  | j                  ||             d{   }| j                  |d	g       }| j                  ||      S 7 7 Z7 -w)
a  
        fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
        :see: https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
        :see: https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
        :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
        Nr   ra   r0   r:  r9  allr  r   )
rk  market_symbolsr,  r5  r   *contractPublicGetCfdOpenApiV1PubMarketDatarG  rm  	safe_listparse_tickers)	r   rr  r   r5  symbolsLengthrH  r   r   r   s	            r   rl  zlbank.fetch_tickers  s     !!!))'2GLMq WQZ099.&RXYf6>&-GN#!LLT[[Y`bhMijjH %GH!99$++gv:VWWH\ ~~h3!!$00 	" k Xs4   C=C7BC=C9.C=C;*C=9C=;C=limitc           	      &  K   | j                          d{    | j                  |      }|d}d|d   i}d}| j                  d||      \  }}d}|dk(  r/||d<   | j                  | j	                  ||             d{   }n.||d<   | j                  | j	                  ||             d{   }| j                  |d	i       }| j                         }	|d   r| j                  ||d   |	d
ddd      S | j                  ||d   |	      S 7 7 7 `w)a  
        fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
        :see: https://www.lbank.com/en-US/docs/index.html#query-market-depth
        :see: https://www.lbank.com/en-US/docs/contract.html#get-handicap
        :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
        N<   r  r   rY   r0   r   sizer   bidsasksr  r_  )	rk  r5  r   +contractPublicGetCfdOpenApiV1PubMarketOrderrG  spotPublicGetDepthr*  millisecondsparse_order_book)
r   r  rz  r   r5  rH  r   r   	orderbookr   s
             r   fetch_order_bookzlbank.fetch_order_book  s>     !!!V$=EfTl
 99:JFTZ[f6>$GG!MMdkkZaciNjkkH#GFO!44T[[&5QRRHb OOHfb9	%%'	&>((F84DiQWY_ahjrss$$Yx0@)LLI 	" l Ss5   DDA(D?D .D.D/ADDDtradec                 b   | j                  |dd      }|| j                  |d      }| j                  |dd      }|| j                  |d      }| j                  |d      }|| j                  |d      }| j                  |d	      }|| j                  |d
      }| j                  |dd      }d }d }	|J|j	                  d      }
| j                  |
d      }| j                  |
d      }d}d}	||dk(  rd}n|dk(  rd}	| j                  |dd      }|| j                  |d      }| j                  |d      }| j                  d |      }d }| j                  |d      }|#||dk(  r|d   n|d   | j                  |d      d}| j                  || j                  |      |||||	||||||d|      S )Ndate_mstimedealTimer  qtydealQuantityr  	dealPricequoteQtydealVolumePrice	tradeTyper   r  r   r   rz  r   r5  r   tidr   txUuid	orderUuidtradeFeebuyr
  r  tradeFeeRate)r  currencyrate)r   rJ  r  r   orderr   takerOrMakersider  r  r  feer(  )safe_integer_2r   rg  r-  r.  rc  
safe_traderf  )r   r  r5  r   amountStringpriceString
costStringr  r   r  r7  typePartr   r  r  r  feeCosts                    r   parse_tradezlbank.parse_trade  s   L ''y&A	))%<I))%5A++E>BL&&ug6**5+>K%%eZ8
))%1BCJ!!%f=JJsOE##E1-D''q1HD"L#x'#D(#*Lud3:!!%2B  4!!$/""5*5/3u}F6N6'?((?C
 "Y/( " 
  	r   sincec                 `  K   | j                          d{    | j                  |      }d|d   i}|||d<   |t        |d      |d<   nd|d<   | j                  | j                  di       }| j                  |dd	      }| j                  |d|      }	| j                  |d      }d}
|	d
k(  r*| j                  | j                  ||             d{   }
n)| j                  | j                  ||             d{   }
| j                  |
dg       }| j                  ||||      S 7 7 X7 0w)a  
        get the list of most recent trades for a particular symbol
        :see: https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
        :see: https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
        :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 Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
        Nr  r   r  iX  r}  rc   r   r   spotPublicGetSupplementTradesr   )rk  r5  r  r*  r   r-  omitr  rG  r   rw  parse_trades)r   r  r  rz  r   r5  rH  r   defaultMethodr   r   r   s               r   fetch_tradeszlbank.fetch_tradesw  s=     !!!V$fTl
 #GFO!%oGFO!GFO//$,,rB(((<QR!!&(MB68,44!??GU[@\]]H!55dkk'66RSSH" &"5  >>K 	"" ^Ss4   D.D'B:D.D*)D.;D,<,D.*D.,D.c           	          | j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  |d      gS )Nr   r               )safe_timestampr2  )r   ohlcvr5  s      r   parse_ohlcvzlbank.parse_ohlcv  sn     q)UA&UA&UA&UA&UA&
 	
r   rw   c                   K   | j                          d{    | j                  |      }|d}nt        |d      }|*| j                  |      }| j	                         |dz  |z  z
  }|d   | j                  | j                  ||      | j                  |dz        |d}| j                  | j                  ||             d{   }	| j                  |	dg       }
| j                  |
||||      S 7 7 .w)a  
        fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
        :see: https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
        :param str symbol: unified symbol of the market to fetch OHLCV data for
        :param str timeframe: the length of time each candle represents
        :param int [since]: timestamp in ms of the earliest candle to fetch
        :param int [limit]: the maximum amount of candles to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        Nd   i  i  r   )r  r   r  r}  r   )rk  r5  r  parse_timeframer  r-  r   parse_to_intspotPublicGetKlinerG  r*  parse_ohlcvs)r   r  	timeframer  rz  r   r5  durationrH  r   ohlcvss              r   fetch_ohlcvzlbank.fetch_ohlcv  s     !!!V$=Et$E=++I6H%%'(T/E*AAETl$$T__iK%%edl3	
 00Wf1MNN626,   E5IIM 	" Os"   C5C1B-C5C3-C53C5c                    | j                  |d      }||| j                  |      d}| j                  |d      }| j                  |d      }|| j                  |di       }| j                  |di       }t        |j	                               }t        dt        |            D ]W  }	||	   }
| j                  |
      }| j                         }| j                  ||
      |d<   | j                  ||
      |d<   |||<   Y | j                  |      S | j                  |d	      }|t        dt        |            D ]i  }	||	   }| j                  |d
      }
| j                  |
      }| j                         }| j                  |d      |d<   | j                  |d      |d<   |||<   k | j                  |      S t        |t              }|du rt        dt        |            D ]i  }	||	   }| j                  |d      }
| j                  |
      }| j                         }| j                  |d      |d<   | j                  |d      |d<   |||<   k | j                  |      S y )Nts)r(  r   rJ  r   toBtcfreezefreer   usedbalancesassetlockedTcoin	usableAmt	freezeAmt)r   rf  r*  listkeysr+  r,  r/  accountr-  safe_balance
isinstance)r   r   r   r3  r   r  r  r  
currenciesr4  
currencyIdcoder  r  item	codeInnerisArrays                    r   parse_balancezlbank.parse_balance  sp   \ %%h5	"Y/

 x0g.??426D??44Ddiik*J1c*o. '']
..z:,,."&"2"24"D"&"2"24"D&t' $$V,,??441c(m, ,{!--dG<
 33J?	,,."&"2"24"@"&"2"24"B$+y!, $$V,,T4(d?1c$i( ,Aw!--dF;
 33J?	,,."&"2"24"E"&"2"24"E$+y!, $$V,,r   c                   K   | j                          d{    | j                  | j                  di       }| j                  |dd      }| j                  |d|      }d}|dk(  r| j	                          d{   }n6|dk(  r| j                          d{   }n| j                          d{   }| j                  |      S 7 7 N7 27 w)a  
        query for balance and get the amount of funds available for trading or funds locked in orders
        :see: https://www.lbank.com/en-US/docs/index.html#asset-information
        :see: https://www.lbank.com/en-US/docs/index.html#account-information
        :see: https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        Nr>   r   r   (spotPrivatePostSupplementUserInfoAccountspotPrivatePostUserInfo)rk  r*  r   r-  r  r  r   r  )r   r   r   r  r   r   s         r   fetch_balancezlbank.fetch_balancen  s      !!!//$,,C(((<_`!!&(MB??!JJLLH00!99;;H!CCEEH> !!(++S 	" M;EsF   CCA!C8C9CC	C/C0CC	CCr  c                     | j                  |d      }| j                  |      }||| j                  |d      | j                  |d      d d dS )Nr  makerCommissiontakerCommission)r(  r  r   r   r\  	tierBased)r-  rc  r2  )r   r  r5  r6  r  s        r   parse_trading_feezlbank.parse_trading_fee  s^     ##C2!!(+%%c+<=%%c+<=
 	
r   c                    K   | j                  |      }| j                  | j                  |d|d   i             d{   }| j                  ||      S 7 w)ae  
        fetch the trading fees for a market
        :see: https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
        :param str symbol: unified market symbol
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
        categoryr   N)r5  fetch_trading_feesrG  rn  )r   r  r   r5  r3  s        r   fetch_trading_feezlbank.fetch_trading_fee  sW      V$..t{{6JPVW[P\C]/^__~~ff-- `s   ;AAAc                 6  K   | j                          d{    i }| j                  | j                  ||             d{   }| j                  |dg       }i }t	        dt        |            D ]   }| j                  ||         }|d   }|||<   " |S 7 ~7 Uw)ae  
        fetch the trading fees for multiple markets
        :see: https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
        Nr   r   r  )rk  )spotPrivatePostSupplementCustomerTradeFeerG  r*  r+  r,  r  )	r   r   rH  r   r   r3  r4  r  r  s	            r   r  zlbank.fetch_trading_fees  s      !!!GGT[]cHdeex4q#d)$ 	!A((a1C]F F6N	!  	"es"   BB*BBABBr  c                    K   | j                          d{    | j                  |      }|d   st        | j                  dz         d|d<   | j	                  |dd|d|       d{   S 7 U7 w)a-  
        create a market buy order by providing the symbol and cost
        :see: https://www.lbank.com/en-US/docs/index.html#place-order
        :see: https://www.lbank.com/en-US/docs/index.html#place-an-order
        :param str symbol: unified symbol of the market to create an order in
        :param float cost: how much you want to trade in units of the quote currency
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr.   z9 createMarketBuyOrderWithCost() supports spot orders onlyFr   r5  r  )rk  r5  r!   r   r   )r   r  r  r   r5  s        r   !create_market_buy_order_with_costz'lbank.create_market_buy_order_with_cost  sy      !!!V$f~tww)ddee6;23&&vxdFSSS 	"
 Ts"   A0A,AA0'A.(A0.A0r   r  r  r  c                 8  K   | j                          d{    | j                  |      }| j                  |dd      }| j                  |dd      }	| j	                  |d      }
| j                  |g d      }d|d	   i}|
d
k(  }|
dk(  }|	xs |
dk(  }|dk(  r|s|s|rt        | j                  dz         |dk(  r]||d<   | j                  ||      |d<   | j                  ||      |d<   |r|dz   dz   |d<   n-|r|dz   dz   |d<   n|r|dz   dz   |d<   n|dk(  r|dk(  r!|dz   dz   |d<   | j                  ||      |d<   n|dk(  r|dz   dz   |d<   d}d}| j                  |ddd      \  }}| j                  |d      }| j                  |d      }|| j                  ||      }ny|re|t        | j                  dz         | j                  |      }| j                  |      }t        j                  ||      }| j                  ||      }n| j                  ||      }||d<   |||d<   | j!                  | j"                  di       }| j%                  |dd      }| j%                  |d|      }| j                  |d      }d}|d k(  r*| j'                  | j)                  ||             d{   }n)| j+                  | j)                  ||             d{   }| j!                  |d!i       }| j-                  | j%                  |d"      |d#|      S 7 7 i7 Aw)$a  
        create a trade order
        :see: https://www.lbank.com/en-US/docs/index.html#place-order
        :see: https://www.lbank.com/en-US/docs/index.html#place-an-order
        :param str symbol: unified symbol of the market to create an order in
        :param str type: 'market' or 'limit'
        :param str side: 'buy' or 'sell'
        :param float amount: how much of currency you want to trade in units of base currency
        :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        N	custom_idclientOrderIdpostOnlyFtimeInForce)r  r  r  r  r  r   IOCFOKPOr5  zw createOrder() does not allow market FOK, IOC, or postOnly orders. Only limit IOC, FOK, and postOnly orders are allowedrz  r   r  r  r  iocfokr   sellr  Tr9   r   r  z createOrder() requires the price argument for market buy orders to calculate the total cost to spend(amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to False and pass the cost to spend in the amount argumentr   r   spotPrivatePostCreateOrderr   order_id)r   r(  )rk  r5  rg  	safe_boolsafe_string_upperr  r   r   price_to_precisionamount_to_precisionhandle_option_and_paramsr2  cost_to_precisionnumber_to_stringr%   
string_mulr*  r   r-  r  rG  r   
safe_order)r   r  r   r  r  r  r   r5  r  r  r  rH  r  r  r   quoteAmountr   r  r  r  costRequestr   r  r   r   r3  s                             r   r   zlbank.create_order  s     !!!V$**6;P>>&*e<,,V]C6#\]fTl
 e#e#2kT1H3#tww  *c   c  d  d7?"GFO#66vuEGG $ 8 8 HGH"&*u"4"&*u"4"&*w"6Xv~"&*x"7$($<$<VV$L!"&*x"7"481<@<Y<YZ`bo  rU  W[  =\916''7662#"&"8"8"FK6}*477  6q  ,q  r  r'+'<'<V'D&*&;&;E&B&-&8&8{&S&*&<&<V[&Q"&"8"8"HK#. $#0GK //$,,rB(((<bc!!&(MB68,11!<<T[[RX=YZZH!FFt{{SZ\bGcddH 626""6:6 
  	Q 	"r [ds4   LLJL,L-)LL=LLLstatusc                 :    ddddddd}| j                  |||      S )NcanceledrT  closed)z-101234)r-  )r   r  statusess      r   parse_order_statuszlbank.parse_order_status>  s2    
 &&99r   r  c           	      6   | j                  |dd      }| j                  |dd      }| j                  |dd      }| j                  |d      }| j                  |d      }| j                  ||      }d }d	}	d
}
| j                  |dd      }|j	                  d      }| j                  |d      }| j                  |d      }|dk(  rd}
|dk(  rd}	d}|dk(  rd}|dk(  rd}| j                  |d      }| j                  |d      }d }|dk7  r| j                  |dd      }| j                  |dd      }| j                  i d|d|d | j                  |      d!|d"d d| j                  |      d|d   d|
d#|d$|	d%|d|d&d d'd d(|d|d)|d d d |d d*|      S )+NorderIdr  r  r  r  create_timer  r  Frz  r   r  r  r   r   r5  r   Tr  r  r  r  r  r  cummulativeQuoteQty
buy_marketorigQtyr  executedQtydeal_amountr   rJ  r   lastTradeTimestampr  r  r  	stopPricetriggerPricer  filled)	remainingr   r  r(  r]  )rg  r  r-  rd  r.  r  rf  r	  )r   r  r5  r   r  r   	rawStatusr6  r  r  r   rawTyper7  r  r  r  r  r  filledStrings                      r   parse_orderzlbank.parse_orderI  sq   p y*=**5/;O''v}E	$$UH5	##E84!!(F3$$UFK@c"q)##E1-xDwHKuKuK  0%%e-BC
l"--eYIL))%N  
" 
] 
 Y/ 
 	 

 !$ 
 d--i8 
 fX& 
 D 
 ; 
  
 D 
 U 
  
 D 
 J 
  l! 
" l# 
$ - 
. / 	r   r   c                 D  K   | j                          d{    | j                  |d      }|0| j                  | j                  di       }| j                  |dd      }|dk(  r| j	                  |||       d{   S | j                  |||       d{   S 7 7 !7 w)a  
        fetches information on an order made by the user
        :see: https://www.lbank.com/en-US/docs/index.html#query-order
        :see: https://www.lbank.com/en-US/docs/index.html#query-order-new
        :param str symbol: unified symbol of the market the order was made in
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nr   rX   r   )rk  r-  r*  r   fetch_order_supplementfetch_order_default)r   r   r  r   r   r   s         r   fetch_orderzlbank.fetch_order  s      !!!!!&(3>oodllL"EG%%gx9OPF++44RHHH--b&&AAA 	" IAs4   B BA#B :B;B BB B B c                 B  K   |t        | j                  dz         | j                          d {    | j                  |      }|d   |d}| j	                  | j                  ||             d {   }| j                  |di       }| j                  |      S 7 j7 *w)N( fetchOrder() requires a symbol argumentr   r  r  r   )r   r   rk  r5  #spotPrivatePostSupplementOrdersInforG  rn  r  )r   r   r  r   r5  rH  r   r3  s           r   r  zlbank.fetch_order_supplement  s     >#DGG.X$XYY!!!V$Tl
 AA$++gW]B^__, &"5''; 	" `s"   .BBAB2B3)BBc                   K   |t        | j                  dz         | j                          d {    | j                  |      }|d   |d}| j	                  | j                  ||             d {   }| j                  |dg       }t        |      }|dk(  r| j                  |d         S t        | j                  dz         7 7 Uw)Nr   r   )r  r  r   r   r   z0 fetchOrder() can only fetch one order at a time)
r   r   rk  r5  spotPrivatePostOrdersInforG  r*  r,  r  r   )	r   r   r  r   r5  rH  r   r3  	numOrderss	            r   r  zlbank.fetch_order_default
  s     >#DGG.X$XYY!!!V$Tl
 77GV8TUU* 626K	>##F1I.. TWW'YYZZM 	" Vs#   .C
CAC
2C3AC
C
c                   K   |t        | j                  dz         | j                          d{    | j                  |      }| j	                  |d|      }| j                  |d      }d|d   i}|||d<   |-| j                  |d      |d<   | j                  |dz   d      |d	<   | j                  | j                  ||             d{   }| j                  |d
g       }| j                  ||||      S 7 7 -w)a  
        fetch all trades made by the user
        :see: https://www.lbank.com/en-US/docs/index.html#past-transaction-details
        :param str symbol: unified market symbol
        :param int [since]: the earliest time in ms to fetch trades for
        :param int [limit]: the maximum number of trade structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
        Nz+ fetchMyTrades() requires a symbol argument
start_dater  r   r}  -i \&end_dater   )r   r   rk  r5  r*  r  ymd!spotPrivatePostTransactionHistoryrG  rw  r  )	r   r  r  rz  r   r5  rH  r   r   s	            r   fetch_my_tradeszlbank.fetch_my_trades6  s     >#DGG.[$[\\!!!V$e<6<0fTl
 #GFO$(HHUC$8GL!"&((58+;S"AGJ??GU[@\]]* &"5  >>Q 	"$ ^s"   .C<C8BC<C:,C<:C<c                 x  K   |t        | j                  dz         | j                          d{    | j                  |      }|d}|d   d|d}| j	                  | j                  ||             d{   }| j                  |di       }| j                  |dg       }	| j                  |	|||      S 7 7 @w)	a8  
        fetches information on multiple orders made by the user
        :see: https://www.lbank.com/en-US/docs/index.html#query-all-orders
        :param str symbol: unified market symbol of the market orders were made in
        :param int [since]: the earliest time in ms to fetch orders for
        :param int [limit]: the maximum number of order structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        Nz) fetchOrders() requires a symbol argumentr  r   r   r  current_pagepage_lengthr   orders)	r   r   rk  r5  *spotPrivatePostSupplementOrdersInfoHistoryrG  r*  rw  parse_orders
r   r  r  rz  r   r5  rH  r   r3  r1  s
             r   fetch_orderszlbank.fetch_ordersl  s      >#DGG.Y$YZZ!!!V$=ETl 
 HHU\^dIeff8 626"5  >>Q 	" g"   .B:B6AB:7B88?B:8B:c                 x  K   |t        | j                  dz         | j                          d{    | j                  |      }|d}|d   d|d}| j	                  | j                  ||             d{   }| j                  |di       }| j                  |dg       }	| j                  |	|||      S 7 7 @w)	a  
        fetch all unfilled currently open orders
        :see: https://www.lbank.com/en-US/docs/index.html#current-pending-order
        :param str symbol: unified market symbol
        :param int [since]: the earliest time in ms to fetch open orders for
        :param int [limit]: the maximum number of open order structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        Nz- fetchOpenOrders() requires a symbol argumentr  r   r   r.  r   r1  )	r   r   rk  r5  )spotPrivatePostSupplementOrdersInfoNoDealrG  r*  rw  r3  r4  s
             r   fetch_open_orderszlbank.fetch_open_orders  s      >#DGG.]$]^^!!!V$=ETl 

 GGT[]cHdee8 626"5  >>O 	" fr6  c                   K   |t        | j                  dz         | j                          d{    | j                  |dd      }| j	                  |ddg      }| j                  |      }|d   |d}|||d<   | j                  | j                  ||             d{   }| j                  |di       }| j                  |      S 7 7 *w)a  
        cancels an open order
        :see: https://www.lbank.com/en-US/docs/index.html#cancel-order-new
        :param str id: order id
        :param str symbol: unified symbol of the market the order was made in
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
        Nz) cancelOrder() requires a symbol argumentorigClientOrderIdr  r   r!  r   )
r   r   rk  rg  r  r5  $spotPrivatePostSupplementCancelOrderrG  rn  r  )	r   r   r  r   r  r5  rH  r   r   s	            r   r   zlbank.cancel_order  s      >#DGG.Y$YZZ!!!**63FX6$7#IJV$Tl
 $+8G'(BB4;;wX^C_`` ~~h3%%3 	" as"   .CC	A/C C!)CCc                 @  K   |t        | j                  dz         | j                          d{    | j                  |      }d|d   i}| j	                  | j                  ||             d{   }| j                  |dg       }| j                  |      S 7 i7 *w)a  
        cancel all open orders in a market
        :see: https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
        :param str symbol: unified market symbol of the market to cancel orders in
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
        Nz- cancelAllOrders() requires a symbol argumentr  r   r   )r   r   rk  r5  ,spotPrivatePostSupplementCancelOrderBySymbolrG  rw  r3  )r   r  r   r5  rH  r   r   s          r   cancel_all_orderszlbank.cancel_all_orders  s      >#DGG.]$]^^!!!V$fTl
 JJ4;;W^`fKghh$ ~~h3  &&1 	"
 is"   .BBA B1B2)BBc                     | j                  | j                  d      }| j                  ||      }| j                  | j                  di       }| j                  |d|      }| j                  |||      }|S )Nr   r   network)r*  r   r  r-  )r   currencyCoder   r   defaultNetworkr   rA  s          r   get_network_code_for_currencyz#lbank.get_network_code_for_currency#  sl    //$,,8IJ//N??4<<R@((NK""8Wg>r   r  c                 n  K   | j                          d{    | j                  | j                  di       }| j                  |dd      }| j                  |d|      }| j	                  |d      }d}|dk(  r| j                  ||       d{   }|S | j                  ||       d{   }|S 7 7 $7 
w)a  
        fetch the deposit address for a currency associated with self account
        :see: https://www.lbank.com/en-US/docs/index.html#get-deposit-address
        :see: https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
        :param str code: unified currency code
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
        NrD   r   r   fetchDepositAddressSupplement)rk  r*  r   r-  r   fetch_deposit_address_supplementfetch_deposit_address_default)r   r  r   r   r  r   r   s          r   fetch_deposit_addresszlbank.fetch_deposit_address+  s      !!!//$,,0ErJ(((<XY!!&(MB68,44!BB4PPH  "??fMMH 	" QMs4   B5B/A5B5B1B5(B3)B51B53B5c                   K   | j                          d {    | j                  |      }d|d   i}| j                  ||      }|||d<   | j                  |d      }| j	                  | j                  ||             d {   }| j                  |d      }| j                  |d      }| j                  |d      }	| j                  |d      }
| j                  | j                  di       }| j                  ||
|
      }|||	||d	S 7 7 w)
N	assetCoder   netWorkrA  r   addressmemor   r  rM  tagrA  r(  )
rk  r  rD  r   spotPrivatePostGetDepositAddressrG  r*  r-  r   r  )r   r  r   r  rH  rA  r   r3  rM  rP  	networkIdinverseNetworksnetworkCodes                r   rH  z#lbank.fetch_deposit_address_default@  s!    !!!==&$
 44T6B!(GIYYvy1F>>t{{7TZ?[\\ 62""695vv.$$VY7	//$,,8JBO,,_iS"
 	
; 	" ]s#   DDA+DD	BD	Dc                 V  K   | j                          d {    | j                  |      }d|d   i}| j                  | j                  d      }| j	                  |d      }| j                  |||      }|||d<   | j                  |d      }| j                  | j                  ||             d {   }| j                  |d      }| j                  |d      }	| j                  |d      }
| j                  | j                  d	i       }| j	                  |||      }||	|
||d
S 7 7 uw)Nr  r   r   rA  networkNamer   rM  rN  r   rO  )	rk  r  r*  r   r  r-  r  *spotPrivatePostSupplementGetDepositAddressrG  )r   r  r   r  rH  r   rA  r   r3  rM  rP  rS  rT  s                r   rG  z&lbank.fetch_deposit_address_supplementf  s8    !!!==&HTN
 ??4<<<((;""8Wg>%,GM"YYvy1FHHU\^dIeff 62""695vv.//$,,8JBO,,_gwO"
 	
; 	" gs#   D)D$BD)1D'2A3D)'D)rM  c                   K   | j                  ||      \  }}| j                  |       | j                          d{    | j                  |d      }| j	                  |d      }| j                  d|d       | j                  |      }||d   ||d}|||d<   | j                  |dd      }	| j	                  |ddg      }| j                  | j                  d	      }
| j                  |
|	|	      }|||d<   | j                  | j                  ||             d{   }| j                  |d
i       }|| j                  |d      dS 7 7 /w)a  
        make a withdrawal
        :see: https://www.lbank.com/en-US/docs/index.html#withdrawal
        :param str code: unified currency code
        :param float amount: the amount to withdraw
        :param str address: the address to withdraw to
        :param str tag:
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
        Nr  rj   r   )rM  r  r  r  rN  rA  rV  r   r   
withdrawId)r(  r   )handle_withdraw_tag_and_paramscheck_addressrk  r-  r  check_required_argumentr  safe_string_upper_2r*  r   !spotPrivatePostSupplementWithdrawrG  )r   r  r  rM  rP  r   r  r  rH  rA  r   rR  r   r3  s                 r   rj   zlbank.withdraw  se     99#vFV7#!!!vu-65)$$Ze<==&TN	
 ?!GFO**69mL6I}#=>??4<<<$$Xw@	 %.GM"??GU[@\]] 626""6<8
 	
O 	"4 ^s"   :EECEE-EEc                 j    dddddddddddd}| j                  | j                  ||i       ||      S )	Npendingokfailedr  transfer)r  r  r  r  5)r  r  r  r  )deposit
withdrawal)r-  r*  )r   r  r   r  s       r   parse_transaction_statuszlbank.parse_transaction_status  sV      	
 $ CVVTTr   transactionr  c                    | j                  |d      }d }|d}nd}| j                  |d      }| j                  |dd      }| j                  | j                  di       }| j                  |d      }| j                  |||      }	| j                  |d	      }
d }d }|dk(  r|
}n|
}| j	                  |d
      }| j                  |dd      }| j                  ||      }| j                  | j                  |d      |      }d }| j	                  |d      }|||d}i d|d|d|d|d| j                  |      d|	d	|
d|d|dd dd dd d|d
|d|d|dd d |dk(  |dS )Nr   re  rf  txId
insertTime	applyTimer   rV  rM  r  r  coidr  r  )r  r  r(  txidr   rJ  rA  	addressToaddressFromrP  tagTotagFromr   r  updatedrc  )commentinternalr  )	r-  r  r*  r   r2  rg  r/  rg  rf  )r   rh  r  r   r   rn  r   r   rR  rA  rM  rp  ro  r  r  r  r  r  r  s                      r   parse_transactionzlbank.parse_transaction  s-   < k40:DDV4''\;O	??4<<1CRH$$[-@	""8Y	B"";	:	9!KI!!+x8''VVD
&&z8<..t/?/?X/VX\]"";6 C
K
"
 D
 	

 Y/
 w
 w
 
 ;
 4
 T
 t
 D
 f
 
  f!
" t#
$ :-)
 	
r   c                 T  K   | j                          d{    i }d}|| j                  |      }|d   |d<   |||d<   | j                  | j                  ||             d{   }| j	                  |di       }| j                  |dg       }	| j                  |	|||      S 7 7 @w)a  
        fetch all deposits made to an account
        :see: https://www.lbank.com/en-US/docs/index.html#get-recharge-history
        :param str code: unified currency code
        :param int [since]: the earliest time in ms to fetch deposits for
        :param int [limit]: the maximum number of deposits structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
        Nr   r  	startTimer   depositOrders)rk  r  'spotPrivatePostSupplementDepositHistoryrG  r*  rw  parse_transactions)
r   r  r  rz  r   rH  r  r   r   depositss
             r   fetch_depositszlbank.fetch_deposits*  s      !!!
 }}T*H&tnGFO#(GK EEdkkRY[aFbcc0 x4>>$<&&x5%HHK 	" d"   B(B$AB(%B&&?B(&B(c                 T  K   | j                          d{    i }d}|| j                  |      }|d   |d<   |||d<   | j                  | j                  ||             d{   }| j	                  |di       }| j                  |dg       }	| j                  |	|||      S 7 7 @w)a#  
        fetch all withdrawals made from an account
        :see: https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
        :param str code: unified currency code
        :param int [since]: the earliest time in ms to fetch withdrawals for
        :param int [limit]: the maximum number of withdrawals structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
        Nr   r  rx  r   r   )rk  r  "spotPrivatePostSupplementWithdrawsrG  r*  rw  r{  )
r   r  r  rz  r   rH  r  r   r   r   s
             r   fetch_withdrawalszlbank.fetch_withdrawals[  s      !!!

 }}T*H&tnGFO#(GK @@WV\A]^^6 x4NN4b9	&&y(E5IIS 	" _r~  codesc                   K   | j                          d{    | j                  d      }d}|du r| j                  | j                  di       }| j	                  |dd      }| j	                  |d|      }| j                  |d      }|dk(  r| j                  |       d{   }|S | j                  |       d{   }|S | j                  |       d{   }|S 7 7 >7 %7 w)aQ  
         * @deprecated
        please use fetchDepositWithdrawFees instead
        :param str[]|None codes: not used by lbank fetchTransactionFees()
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
        NFTre   r   r   fetchPublicTransactionFees)rk  check_required_credentialsr*  r   r-  r  fetch_public_transaction_feesfetch_private_transaction_fees)r   r  r   isAuthorizedr3  r   r  r   s           r   fetch_transaction_feeszlbank.fetch_transaction_fees  s      !!!66u=4oodll4JBOG ,,Wh@]^M%%fhFFYYvx0F55#AA&II
   $BB6JJ   ==fEEF 	" JJEsF   C%CB	C% C!C%;C!<C%C#C%C%!C%#C%c                 8  K   | j                          d {    | j                          d {   }| j                  |dg       }i }t        dt	        |            D ]  }||   }| j                  |d      }| j                  |      }| j                  |dg       }	i ||<   t        dt	        |	            D ]V  }
|	|
   }| j                  |d      }| j                  | j                  d   ||      }| j                  |d      }|O|||   |<   X  |i |dS 7 7 w)	Nr   r   r  networkListr   r   withdrawFeerj   re  r(  )	rk  r   r*  r+  r,  r-  r/  r   r2  )r   r   r   r3  withdrawFeesr4  entryr  r  r  jnetworkEntryrR  rT  r  s                  r   r  z$lbank.fetch_private_transaction_fees  s@     !!!??AA> 626q#f+& 	:A1IE))%8J**:6D//%CK!#L1c+./ :*1~ ,,\6B	"..t||<N/OQZ\ef&&|]C?69L&{3:	: %
 	
_ 	"As&   DDDDCDDDc                   K   | j                          d {    | j                  |dd      }| j                  |ddg      }i }|| j                  |      }|d   |d<   | j	                  | j                  ||             d {   }| j                  |dg       }i }t        dt        |            D ]  }||   }	| j                  |	d      }
|
dk(  s | j                  |	d      }| j                  |      }| j                  |	d      }| j                  | j                  d	   ||      }||}| j                  |	d
      }||   i ||<   | j                  |      ||   |<    |i |dS 7 P7 w)Nr  rK  r   r   r   canWithDrawtruechainr   r  r  )rk  rg  r  r  spotPublicGetWithdrawConfigsrG  r*  r+  r,  r-  r/  r   r   )r   r   r  rH  r  r   r3  r  r4  r  canWithdrawr  r  r  rA  r  s                   r   r  z#lbank.fetch_public_transaction_fees  s     !!!!!&&+>6FK#89}}T*H#+D>GK ::4;;wPV;WXX, 626q#f+& 	JA!9D//$>Kf$!--dK@
 33J?	((w7**4<<8J+KUTYZ?'G&&tU3	*2.0L+373D3DS3IY'0	J %
 	
[ 	" Ys*   E+E&A,E+E)AE+BE+)E+c                   K   | j                          d{    | j                  d      }d}|du r| j                  | j                  di       }| j	                  |dd      }| j	                  |d|      }| j                  |d      }|dk(  r| j                  ||       d{    |S | j                  ||       d{    |S | j                  ||       d{    |S 7 7 @7 &7 w)a  
        when using private endpoint, only returns information for currencies with non-zero balance, use public method by specifying self.options['fetchDepositWithdrawFees']['method'] = 'fetchPublicDepositWithdrawFees'
        :see: https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
        :see: https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
        :param str[]|None codes: array of unified currency codes
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
        NFTrG   r   r   fetchPublicDepositWithdrawFees)rk  r  r*  r   r-  r  "fetch_public_deposit_withdraw_fees#fetch_private_deposit_withdraw_fees)r   r  r   r  r   r   r  r   s           r   fetch_deposit_withdraw_feesz!lbank.fetch_deposit_withdraw_fees	  s      !!!66u=4oodll4NPRSG ,,Wh@abM%%fhFFYYvx0F99==eVLLL
  >>ufMMM  99%HHH 	" MMHsF   C(C B
C(!C""C(=C$>C(C&C("C($C(&C(c                    K   | j                          d {    | j                  |       d {   }| j                  |dg       }| j                  ||d      S 7 C7 ,w)Nr   r  )rk  r   rw  parse_deposit_withdraw_fees)r   r  r   r   r   s        r   r  z)lbank.fetch_private_deposit_withdraw_fees0	  s`      !!!??GG> ~~h3//eVDDC 	"Gs   AAAA+AAc                    K   | j                          d {    i }| j                  | j                  ||             d {   }| j                  |dg       }| j	                  ||      S 7 T7 +w)Nr   )rk  r  rG  r*  "parse_public_deposit_withdraw_fees)r   r  r   rH  r   r   s         r   r  z(lbank.fetch_public_deposit_withdraw_feesV	  sn      !!!::4;;wPV;WXX, x466tUCC3 	"Xs!   A/A+*A/A-*A/-A/c                 >   i }t        dt        |            D ]  }||   }| j                  |d      }|du s | j                  |d      }| j	                  |      }|| j                  ||      sX| j                  |d      }	|	m| j                  ||      }
|
| j                  |g      ||<   n||   d   j                  |       | j                  |d      }| j                  | j                  d   ||      }||	d d	d d d	d
||   d   |<   |	d d	||   d<    |S )Nr   r  TrK  r  r(  r  r   r  r\  rj   re  r   rj   )
r+  r,  r*  r-  r/  in_arrayr2  deposit_withdraw_feer0  r   )r   r   r  r3  r4  r  r  r  r  r  resultValuer  rT  s                r   r  z(lbank.parse_public_deposit_withdraw_feest	  s[   " q#h-( 	A1+C//#}=Kd"!--c;?
..z:=DMM$$>"&"2"23">K".&*oofd&C&.+/+D+DcU+KF4L"4L077< $ 0 0g >&*&6&6t||DV7WY^`e&f&2 ,726-"
 ,026,"	EF4L4[A (3.28F4L49	@ r   c                 t   | j                  |      }| j                  |dg       }t        dt        |            D ]{  }||   }| j	                  |d      }| j                  | j                  d   ||      }| j                  |d      }	| j                  |d      }
|	a|
r|	d d|d<   |	d dd d dd	|d
   |<   } |S )Nr  r   r   r   r  	isDefaultr  rj   r  r   )r  r*  r+  r,  r-  r  r   r2  )r   r  r  r3  r  r  r  rR  rT  r  r  s              r   parse_deposit_withdraw_feez lbank.parse_deposit_withdraw_fee	  s    6 **3/ooc="=q#k*+ 	A&q>L((v>I00>P1QS\^ghK**<GKkBI&*&**F:&  +&*!
  $&* 	3z";/	, r   r   GETc           
         | j                  || j                  |            }| j                  d   d   dz   | j                  z   dz   | j	                  ||      z   }|d   dk(  r|dz  }n(| j                  d   d   dz   | j	                  ||      z   }|d   d	k(  r+|rN|d
| j                  | j                  |            z   z  }n&| j                          t        | j                               }	| j                         | j                         z   }
| j                  d| j                  i|      }d }t        | j                        dkD  rd}nd}| j!                  | j                  | j                  |
||	d|                  }| j#                  |      }| j%                  |d      }|j'                         }d }|dk(  r| j)                  | j*                  dd      }d }|rX| j-                  | j*                  d      }|d| j/                  | j#                  | j                              }|| j*                  d<   n*| j/                  | j#                  | j                              }| j1                  ||d      }nN|dk(  rI| j3                  | j#                  |      | j#                  | j                        t4        j6                        }||d<   | j                  | j                  |            }d|	||
d}||||dS )Nr   r   r	  r   r.   z.dor   r   r   ?api_key    RSA
HmacSHA256)echostrsignature_methodr   md5r   Tpemsha256signz!application/x-www-form-urlencoded)zContent-Typer   r  r  )urlr   bodyheaders)r  extract_paramsr   r   implode_params	urlencodekeysortr  strr  uuid22uuid16rG  apiKeyr,  secret	rawencodeencodehashupperr  r   r*  convert_secret_to_pemrsahmachashlibr  )r   pathr   r   r   r  r  queryr  r   r  signatureMethodauthencodedr  uppercaseHashr  r   r  s                      r   r  z
lbank.sign	  s   		&$"5"5d";<iiv&,t||;cADDWDWX\^dDeeq6V5LC))E":.4t7J7J4QW7XXCq6XsT^^DLL,?@@@++-D--/0Ikkmdkkm3GKK4;;!E #O4;;"$"'".>>$,,t{{"$3&< 	0 # D
 kk$'G99We,D JJLMD%'#'>>$,,@RTX#Y #//$,,>C{"88T[[9QR.1U+44T[[5MNCxxsH= L0yy]!;T[[=UW^WeWef E&M>>$,,u"56D C&$3"	G fdwOOr   c                     d}t        |      dz
  }| j                  ||z        }| j                  |d      }d}t        d|      D ].  }||z  }| j                  ||      }|| j                  || dz   z  }0 |dz   S )N@   r   r   z-----BEGIN PRIVATE KEY-----

z-----END PRIVATE KEY-----)r,  r  sumr+  r  )	r   r  
lineLengthsecretLengthnumLinesr  r4  startends	            r   r  zlbank.convert_secret_to_pem
  s    
6{Q$$\J%>?88Ha(-q(# 	1A
NE((5*-C4;;uS)D00C	1 000r   httpCodereasonr  r   r  r  c
                    |y | j                  |d      }
|
dk(  s|
s+| j                  |d      }| j                  i dddddd	d
dddddddddddddddddddddd d!d"d#d$d%i d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGi dHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdg|| j                  |            }| j                  i dt        dt        d
t        dt
        dt        dt        dt        dt        dt        dt        dt        dt        dt        d t        d"t        d$t        d&t        i d(t        d*t        d,t        d.t        d0t        d2t        d4t        d6t        d8t        d:t        d<t        d>t        d@t        dBt        dDt        dFt        dHt        t        t        t        t        t        t        t        t        t        t        t        t        t        t        t        dh|t              } ||      y )iNr3  false
error_code10000zInternal error10001z(The required parameters can not be empty10002zValidation failed10003zInvalid parameter10004zRequest too frequent10005zSecret key does not exist10006zUser does not exist10007zInvalid signature10008zInvalid Trading Pair10009z0Price and/or Amount are required for limit order10010z9Price and/or Amount must be less than minimum requirement10013zThe amount is too small10014z+Insufficient amount of money in the account10015zInvalid order type10016zInsufficient account balance10017zServer Error10018z$Page size should be between 1 and 5010019z+Cancel NO more than 3 orders in one request10020zVolume < 0.00110021zPrice < 0.0110022zInvalid authorization10023z!Market Order is not supported yet10024zUser cannot trade on self pair10025zOrder has been filled10026zOrder has been cancelld10027zOrder is cancelling10028zWrong query time10029zfrom is not in the query time10030z0from do not match the transaction type of inqury10031z=echostr length must be valid and length must be from 30 to 4010033zFailed to create order10036zcustomID duplicated10100zHas no privilege to withdraw10101zInvalid fee rate to withdraw10102zToo little to withdraw10103z#Exceed daily limitation of withdraw10104zCancel was rejected10105zRequest has been cancelled10106zNone trade time10107zStart price exception10108zcan not create order10109zwallet address is not mapping10110ztransfer fee is not mapping10111z	mount > 010112zfee is too lower10113ztransfer fee is 010600z5intercepted by replay attacks filter, check timestamp10601zInterface closed unavailable10701zinvalid asset code10702znot allowed deposit)r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  )r*  r-  jsonr   r   r"   r   r   r   r   r   r#   r    r   )r   r  r  r  r   r  r  r   requestHeadersrequestBodysuccess	errorCodemessage
ErrorClasss                 r   handle_errorszlbank.handle_errors 
  s   //(H5gW((<@I&& 5()5(C5( ,5( ,	5(
 /5( 45( .5( ,5( /5( K5( T5( 25( F5(  -!5(" 7#5($ %5(& ?'5(( F)5(* )+5(, -5(. 0/5(0 <15(2 935(4 055(6 275(8 .95(: +;5(< 8=5(> K?5(@ XA5(B 1C5(D .E5(F 7G5(H 7I5(J 1K5(L >M5(N .O5(P 5Q5(R *S5(T 0U5(V /W5(X 8Y5(Z 6[5(\ ]5(^ +_5(` ,a5(b Pc5(d 7e5(f -g5(h .i5(j $))H-k5/Gl  2*2*,2* 2* *	2*
 ,2* ,2* ,2* 2* 2* 2* 2* *2* 2* *2* 2*  !2*" #2*$ %2*& '2*( ))2** +2*, )-2*. /2*0 12*2 32*4 52*6 72*8 92*: ;2*< =2*> )?2*@ )A2*B C2*D *E2*F '&&##&'&####&")c2*d -e2)Jf W%%r   )N)M__name__
__module____qualname__r   r   r   r   r  r   r   dictr   ri  r  rq  r   r   rl  r   r   r  r   r  r  r  r  r  r   r  r  r   r  r  r   r  floatr  r   r   r	   r   r   r	  r
   r  r  r  r  r,  r5  r9  r   r?  rD  rI  rH  rG  r   rj   rg  r   rv  r}  r  r  r  r  r  r  r  r  r  r  r  intr  __classcell__)r   s   @r   r'   r'      s6   Vp ') #3J *, IV I /1 M^ /1 ^@:4 : :6 :x 68 (0 (0F (0T 6:" H17 H1 H1T @DB NMS NM NMS\ NM`[ [v [ [z <@d[] 0? 0?S 0? 0?bfglbm 0?d
 
4 
( 8<$]ajl 2J 2JC 2JWZ 2Jquvzq{ 2Jh{ {z *, 2, 2,h
T 
6 
EX 
& ;= 
.c 
.AT 
. /1 [ $ XZ Tc T T" mqy{ X XI XY XX] Xfi Xt	: 	:K Kv K KZ 8<B BC B B$ CGr  (s  (C  (D @DB *[C *[ *[X 37TX\eg 4?C 4?s 4?RU 4?l 04$UYbd 6? 6?C 6?s 6?imnsit 6?p 59tZ^gi 3?c 3? 3?TW 3?nrsxny 3?j 9=R $&S $&# $&L 59 "'c "'H =?  * EG $
 $
L HJ %
3 %
N JNVX 7
3 7
 7
 7
]h 7
rU$P
T P
X P
Q\ P
d 04$UYbd /I /IC /Is /Iimnyiz /Ib 37TX\eg 3JC 3Js 3JRU 3Jlpq|l} 3Jj =A ' 2 ;= 6
p :< 4
l BFb w 2 ?C2 $EL >B" D<2h3 3j &eBSW 5Pn
1pc p3 pS p# pX\ pdg pr   r'   )- ccxt.async_support.base.exchanger   ccxt.abstract.lbankr   r   r  ccxt.base.typesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   typingr   ccxt.base.errorsr   r   r   r   r   r   r   r   r   r    r!   r"   r#   ccxt.base.decimal_to_precisionr$   ccxt.base.preciser%   r'    r   r   <module>r(     sq    6 +   ~  ~  ~  ~  ~  * 0 - . ' & . + ) - ) . ) 4 %s)Hk s)r   