
    ei                    d   d dl mZ d dlm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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          Z0dS )    )Exchange)ImplicitAPIN)AnyBalances
CurrenciesCurrencyDepositAddressIntMarketNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickersFundingRateFundingRates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def fdZi fdefdZi fdefdZi fde	e
         fdZi fdZi fdZdYd	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dYded
e
defdZddi fdededede	e         fdZdYd
e
defdZdddi fdedededede	e         f
dZdefdZdYd
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$i fdefdZ%dYd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)Z0d*e1fd+Z2dYd,ed
e
de3fd-Z4di fd.ede1fd/Z5di fd.ede1fd0Z6di fd.ede1fd1Z7dddi fde1dedefd2Z8dddi fde1dedede	e3         fd3Z9dddi fde1dedede	e3         fd4Z:di fd.ede1fd5Z;di fde1fd6Z<d7 Z=i fd8ede>fd9Z?i fd8ede>fd:Z@i fd8ede>fd;ZAdi fd8ed'e+d<ed=e1deBf
d>ZCd? ZDdYd@edAeEdeBfdBZFdddi fd8e1dedede	eB         fdCZGdddi fd8e1dedede	eB         fdDZHdi fdEefdFZIi fdGZJi fdHZKdi fdEefdIZLdi fdJZMdi fdKZNdYdLZOdYdAeEfdMZPdNdOi ddfdPZQdQ ZRdReSdSedTedUedVedWefdXZT xZUS )Zlbankreturnc           "      @   |                      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=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSi dTdUdVdUdWdUdXdUdYdZd[dUd\dUd]dUd^dUd_dUd`dUdadUdbdUdcdUdddUdedUdfdUdgdUidhdii djdUdkdUdldUdmdUdndUdodUdpdqdrdqdsdqdtdqdudUdvdUdwdUdxdUdydUdzdUd{dUi d|dUd}dUd~dUddUddUddUddUddUddUdbdUddqddqddqddqddUddUddUdUdUdiddddUdUdUdUdiid|                     d          |                     d          ddzi idddddd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ddddddddiddddd dddd dddddÜddddddddĜd ddddddȜdddddɜdddddd˜ddd d dddd̜d ddidϜ	ddiddid dҜd d dҜ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fetchCurrenciesfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetwork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assetConfigswithdrawConfigsg      @	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_dealrs   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)r4   r   z0.001)makertaker)tradingfundingXBTHiverVENPenta)r   HIT	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   bep20USDT)cacheSecretAsPem!createMarketBuyOrderRequiresPricerl   rn   rP   rK   r?   ra   rD   networksnetworksByIddefaultNetworks)IOCFOKPOGTD)
marginModetriggerPricetriggerPriceTypetriggerDirectionstopLossPricetakeProfitPriceattachedStopLossTakeProfittimeInForcehedgedselfTradePreventiontrailingleveragemarketBuyByCostmarketBuyRequiresPriceicebergd   i    )r   limitdaysBack	untilDayssymbolRequired)r   triggerr   r     )r   r   r  r   r  )r   r   r  r  r  r   r  r     )	sandboxr?   createOrdersr^   ra   r`   rc   rG   r_   extendsdefault)linearinverse)r
  r4   r6   r7   )idname	countriesversion	rateLimitprohas
timeframesurlsr   r   commonCurrenciesprecisionModeoptionsfeatures)deep_extendsuperr,   describeparse_numberr)   )self	__class__s    H/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/lbank.pyr  zlbank.describe   s	   eT 2 2 ; ; = = AAA %A 	A
 %A %A UA "4A tA /A ,UA 0A tA (A 'A  (!A" "5#A A$ %A& +E'A( )%)A* $U+A, '-A. (/A0 "41A2 &t3A4 (5A6 1%7A8 *:9A: +D;A< &u=A> #E?A@ *5AAB $TCAD "5EA A AF *5GAH +EIAJ )%KAL  MAN %eOAP "5QAR SAT !%UAV  WAX dYAZ "4[A\ d]A^ !$_A` taAb  cAd $UeAf !%gA Ah ',*/# $!#$((, %$!&#( AA A AF  !!  ~4 ;  0.D CE  +S &  '  +C	 
 .y  (  *3  %c  $S  (  %c  $S  5c  3C   0! " 6s# $ ;C% * 7!+ 4  *!'*! 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*! *! *!, 5G GR :==@=@>A	   	SS Sl "..w77!..w77 
   "	! ! '$(593  ;) ?- :( D  4 A!%W%7% W% 7	%
 F% 5% \% <% &% 6% 5% J% W% w% 5%  y!%" 5#%N %$"")$! ! G$KH HV  %&+(-,0,1).+06:#'#'"'#(	( ( #(/4$)$)+/27#()$ $, %)&+!$$*%&*.& & ',#($)*.	# # ',!$#($)*.( ( ',!$$(%)#($)*.$ $ *.#o: :x y
 "9  $	  ## KI Ie\@
 \@
 \ \ \	    c                     d}|                      dd|          \  }}d}|dk    r|                     |          }n|                     |          }|                     |d          S )a  
        fetches the current integer timestamp in milliseconds from the exchange server

        https://www.lbank.com/en-US/docs/index.html#get-timestamp
        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
        Nrk   r6   data)handle_market_type_and_params'contractPublicGetCfdOpenApiV1PubGetTimespotPublicGetTimestampsafe_integer)r  paramstyperesponses       r   
fetch_timezlbank.fetch_time}  sr     99+tVTTf6>>CCFKKHH226::H*   6222r!  c                    |                      |          }|                     |dg           }|                     |d          }t          |                                          }i }t          dt          |                    D ]r}t          ||                   }|                     |          }	||         }
i }t          dt          |
                    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          ||	<   t|S )z
        fetches all available currencies on an exchange
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: an associative dictionary of currencies
        r#  	assetCoder   chainNminr/  maxminTransferrs   depositcanWithDrawfeetransferAmtScale)	r  networklimitsactiver4  rs   r6  	precisioninfo)r  coder;  r)  r  r:  r4  rs   r6  r9  r   r<  )spotPublicGetWithdrawConfigs	safe_listgroup_bylistkeysrangelenstrsafe_currency_codesafe_stringnetwork_id_to_codesafe_number	safe_boolr  parse_precisionsafe_currency_structure)r  r(  r*  currenciesDatagroupedgroupedKeysresultir  r=  networksRawr   jnetworkEntry	networkIdnetworkCodes                   r   fetch_currencieszlbank.fetch_currencies  sc    44V<<D &"==--<<7<<>>**q#k**++ 5	 5	Ak!n&&B**2..D!"+KH1c+..//  *1~ ,,\7CC	$ $ 0 0{ K KI"55i@@#* $(#3#3L%#H#H#'% %
 $(#3#3L-#P#P#'$ $	 	 ## $|] K K++L%@@!%!2!243G3GHXHXYegyHzHz3{3{!|!|(%) )%%(  77!   $#! !
  $#   	 	 %#+9 9  F4LL. r!  c                     |                      |          |                     |          g}|}|                     |d         |d                   S )ao  
        retrieves data on all markets for lbank

        https://www.lbank.com/en-US/docs/index.html#trading-pairs
        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
        r   r   )fetch_spot_marketsfetch_swap_marketsarray_concat)r  r(  marketsPromisesresolvedMarketss       r   fetch_marketszlbank.fetch_markets  sT     ##F++##F++
 *  !3_Q5GHHHr!  c                 r   |                      |          }|                     |dg           }g }t          dt          |                    D ]i}||         }|                     |d          }|                    d          }|d         }	|d         }
|                     |	          }|                     |
          }|dz   |z   }|                    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 |                     | 	                    |                     |d                              |                     | 	                    |                     |d                              dd d d| 
                    |d          d dd d dd d ddd |d
           k|S ) Nr#  r   symbol_r   /r  basequotebaseIdquoteIdsettlesettleIdr)  r4   Tr5   Fr6   r7   r8   r:  r   r  quantityAccuracypriceAccuracyamountpricer0  
minTranQuar   rl  rm  cost
r  contractSizeexpiryexpiryDatetimestrike
optionTyper;  r9  createdr<  )spotPublicGetAccuracy
safe_valuerC  rD  rG  splitrF  appendr  rK  rI  )r  r(  r*  r#  rP  rQ  marketmarketIdpartsre  rf  rc  rd  r`  s                 r   rY  zlbank.fetch_spot_markets  s   --f55  x44q#d))$$ 9	 9	A!WF''99HNN3''E1XFAhG**622D++G4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\^pEqEq0r0rss!..t/C/CDDTDTU[]lDmDm/n/noo   $#! !
  $//EE# 
  $# 
  $#  $  _0 0 0 0 0 0 0b r!  c                    ddi}|                      |                     ||                    }|                     |dg           }g }t          dt	          |                    D ]}||         }|                     |d          }|                     |d          }	|                     |d          }
|
}|                     |	          }|                     |          }|                     |
          }|dz   |z   d	z   |z   }|                    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          dd d d |                     |d!          |                     |d"          d |                     |d#          |                     |d$          d |                     |d%          d d d&d |d'
           |S )(NproductGroupSwapUr#  r   r`  baseCurrencyclearCurrencyrb  :r  rc  rd  rg  re  rf  rh  r)  r6   r4   Fr5   Tr7   r8   r:  r   r  volumeMultiple
volumeTick	priceTickrk  r0  minOrderVolumemaxOrderVolumepriceLimitLowerValuepriceLimitUpperValueminOrderCostro  rq  )	*contractPublicGetCfdOpenApiV1PubInstrumentextendry  rC  rD  rG  rF  r{  rI  )r  r(  requestr*  r#  rP  rQ  r|  r}  re  rh  rf  rc  rd  rg  r`  s                   r   rZ  zlbank.fetch_swap_marketsh  s   G
 BB4;;wX^C_C_``: x44q#d))$$ :	 :	A!WF''99H%%fn==F''@@HG**622D++G44E,,X6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 J"&""..v|DD!--fkBB   $#! !
  $//8HII#//8HII 
  $//8NOO#//8NOO 
  $//GG#  $  _0 0 0 0 0 0 0b r!  Nr   r|  c           	         |                      |d          }|                     |d          }|                     ||          }|                     |di           }|                     ||          }|d         r|n|}|                     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 |                     |dd          |                     |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'  rG  safe_symbolry  safe_marketsafe_tickeriso8601safe_string_2)r  r   r|  r   r}  r`  
tickerDatar#  s           r   parse_tickerzlbank.parse_ticker  s   > %%fk::	##FH55!!(F33__VXr::
!!(F33 ,=vv: !
f!
!
 Y//!
 D&&tV^DD	!

 4%%dE=AA!
 4!
 !
 4!
 !
 D!
 D$$T;77!
 T!
 D&&tX{CC!
 T!
 d!
  $**4::!!
" t#!
$ ,,T5(CC++D*==)!
 !
 !
* +  	r!  r`  c                    |                                   |                     |          }|d         r9|                     |d         g|          }|                     ||d                   S d|d         i}|                     |                     ||                    }|                     |dg           }|                     |di           }|                     ||          S )a  
        fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        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>`
        r6   r`  r  r#  r   )load_marketsr|  fetch_tickersry  spotPublicGetTicker24hrr  	safe_dictr  )	r  r`  r(  r|  responseForSwapr  r*  r#  firsts	            r   fetch_tickerzlbank.fetch_ticker  s     	V$$&> 	F"00&2B1CVLLO???F84DEEEfTl
 //GV0L0LMM, x44tQ++  ///r!  symbolsc                    |                                   d}|E|                     |          }t          |          }|dk    r|                     |d                   }i }d}|                     d||          \  }}d}|dk    r/d|d<   |                     |                     ||                    }n.d|d<   |                     |                     ||                    }|                     |d	g           }| 	                    ||          S )
au  
        fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market

        https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
        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   rj   r6   r  r  allr`  r#  )
r  market_symbolsrD  r|  r$  *contractPublicGetCfdOpenApiV1PubMarketDatar  r  r?  parse_tickers)	r  r  r(  r|  symbolsLengthr  r)  r*  r#  s	            r   r  zlbank.fetch_tickers0  s    	))'22GLLMq  WQZ0099.&RXYYf6>>&-GN#FFt{{SZ\bGcGcddHH %GH33DKK4P4PQQH\ ~~h33!!$000r!  r   c           	      X   |                                   |                     |          }|d}d|d         i}d}|                     d||          \  }}d}|dk    r/||d<   |                     |                     ||                    }n.||d<   |                     |                     ||                    }|                     |d	i           }|                                 }	|d         r!|                     ||d         |	d
ddd          S |                     ||d         |	d
d          S )a~  
        fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://www.lbank.com/en-US/docs/index.html#query-market-depth
        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  rb   r6   r   sizer#  bidsasksrm  r  )	r  r|  r$  +contractPublicGetCfdOpenApiV1PubMarketOrderr  spotPublicGetDepthry  millisecondsparse_order_book)
r  r`  r   r(  r|  r  r)  r*  	orderbookr   s
             r   fetch_order_bookzlbank.fetch_order_book|  sM    	V$$=EfTl
 99:JFTZ[[f6>>$GGGGT[]cHdHdeeHH#GFO..t{{7F/K/KLLHb OOHfb99	%%''	&> 	t((F84DiQWY_ahjrsss$$Yx0@)VU[\\\r!  tradec                    |                      |dd          }||                     |d          }|                     |dd          }||                     |d          }|                     |d          }||                     |d          }|                     |d	          }||                     |d
          }|                     |dd          }d }d }	|X|                    d          }
|                     |
d          }|                     |
d          }d}d}	||dk    rd}n|dk    rd}	|                     |dd          }||                     |d          }|                     |d          }|                     d |          }d }|                     |d          }|.||dk    r|d         n|d         |                     |d          d}|                     ||                     |          |||||	||||||d|          S )Ndate_mstimedealTimerl  qtydealQuantityrm  	dealPricequoteQtydealVolumePrice	tradeTyper)  ra  r   r   r   r   r|  r   tidr  txUuid	orderUuidtradeFeebuyrc  rd  tradeFeeRate)rp  currencyrate)r   r  r`  r  orderr)  takerOrMakersiderm  rl  rp  r6  r<  )safe_integer_2r'  r  rG  rz  r  
safe_trader  )r  r  r|  r   amountStringpriceString
costStringr  r)  r  r~  typePartr  r  r`  r6  feeCosts                    r   parse_tradezlbank.parse_trade  sj   L ''y&AA	))%<<I))%5AA++E>BBL&&ug66**5+>>K%%eZ88
))%1BCCJ!!%f==JJsOOE##E1--D''q11HD"L#x''#DD((#*Lud33:!!%22B  44!!$//""5*55/3u}}F6NN6'?((?? C
 "Y//( " 
  
   	r!  sincec                    |                                   |                     |          }d|d         i}|||d<   |t          |d          |d<   nd|d<   |                     | j        di           }|                     |dd	          }|                     |d|          }	|                     |d          }d}
|	d
k    r*|                     |                     ||                    }
n)| 	                    |                     ||                    }
| 
                    |
dg           }|                     ||||          S )a|  
        get the list of most recent trades for a particular symbol

        https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
        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>`
        r`  r  Nr  iX  r  rl   r   r   spotPublicGetSupplementTradesr#  )r  r|  r/  ry  r  rG  omitr  r  r   r?  parse_trades)r  r`  r  r   r(  r|  r  r  defaultMethodr   r*  r   s               r   fetch_tradeszlbank.fetch_trades+  sI    	V$$fTl
 #GFO!%ooGFOO!GFO//$,rBB(((<QRR!!&(MBB68,,44499$++gv:V:VWWHH//GV0L0LMMH" &"55  >>>r!  c           	         |                      |d          |                     |d          |                     |d          |                     |d          |                     |d          |                     |d          gS )Nr   r   r            )safe_timestamprI  )r  ohlcvr|  s      r   parse_ohlcvzlbank.parse_ohlcv_  s     q))UA&&UA&&UA&&UA&&UA&&
 	
r!  r   	timeframec                 4   |                                   |                     |          }|d}nt          |d          }|2|                     |          }|                                 |dz  |z  z
  }|d         |                     | j        ||          |                     |dz            t          |dz   d          d}|                     | 	                    ||                    }	| 
                    |	dg           }
|                     |
||||          S )	a  
        fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        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
        Nr   r  i  r  r   )r`  r)  r  r  r#  )r  r|  r/  parse_timeframer  rG  r  parse_to_intspotPublicGetKliner  r?  parse_ohlcvs)r  r`  r  r  r   r(  r|  durationr  r*  ohlcvss              r   fetch_ohlcvzlbank.fetch_ohlcvs  s    	V$$=EEt$$E=++I66H%%''8d?U+BCETl$$T_iKK%%edl33	4((	
 
 **4;;w+G+GHH&"55,   E5IIIr!  c                    |                      |d          }|||                     |          d}|                     |d          }|                     |d          }||                     |di           }|                     |di           }t          |                                          }t          dt          |                    D ]j}	||	         }
|                     |
          }|                                 }| 	                    ||
          |d<   | 	                    ||
          |d<   |||<   k| 
                    |          S |                     |d	          }|t          dt          |                    D ]}	||	         }| 	                    |d
          }
|                     |
          }|                                 }| 	                    |d          |d<   | 	                    |d          |d<   |||<   | 
                    |          S t          |t                    }|du rt          dt          |                    D ]}	||	         }| 	                    |d          }
|                     |
          }|                                 }| 	                    |d          |d<   | 	                    |d          |d<   |||<   | 
                    |          S d S )Nts)r<  r   r  r#  toBtcfreezefreer   usedbalancesassetlockedTcoin	usableAmt	freezeAmt)r'  r  ry  rA  rB  rC  rD  rF  accountrG  safe_balance
isinstance)r  r*  r   rP  r#  r  r  r  
currenciesrQ  
currencyIdr=  r  r  item	codeInnerisArrays                    r   parse_balancezlbank.parse_balance  s   \ %%h55	"Y//
 

 x00g..??4266D??444Ddiikk**J1c*oo.. ' '']
..z::,,.."&"2"24"D"D"&"2"24"D"D&t$$V,,,??4441c(mm,, , ,{!--dG<<
 33J??	,,.."&"2"24"@"@"&"2"24"B"B$+y!!$$V,,,T4((d??1c$ii(( , ,Aw!--dF;;
 33J??	,,.."&"2"24"E"E"&"2"24"E"E$+y!!$$V,,,tr!  c                 "   |                      |d          }|                     ||          }|                     |d          }|                     |d          }|                     |d          }|                     |d          }|                     |d          }	d }
|	-|                     |	dz  dz            }t          |          dz   }
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|
S )Nr`  markedPriceunderlyingPricefundingRatenextFeeTimepositionFeeTimer  hr<  	markPrice
indexPricefundingTimestampfundingDatetimer   r  nextFundingRatenextFundingTimestampnextFundingDatetimepreviousFundingRatepreviousFundingTimestamppreviousFundingDatetimeinterval)rG  r  rI  r'  r  rE  r  )r  r   r|  r}  r`  r  r  r  fundingTimer  intervalStringr&  s               r   parse_funding_ratezlbank.parse_funding_rate&  s     ##FH55!!(F33$$V];;	%%f.?@@
&&v}==''>>++F4EFF&((2)=)BCCH ]]S0N
F
f
 
 *	

 ;
 
 t||K88
 
 
 t
 #D
 "4
 "4
 '
 &t
  !
 	
r!  c                     |                                   |                     |          }|                     |d         g|          }|                     ||d                   S )ao  
        fetch the current funding rate

        https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list

        :param str symbol: unified market symbol
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `funding rate structure <https://docs.ccxt.com/?id=funding-rate-structure>`
        r`  )r  r|  fetch_funding_ratesry  )r  r`  r(  r|  r  s        r   fetch_funding_ratezlbank.fetch_funding_rateT  s]     	V$$22F84D3EvNNx0@AAAr!  c                    |                                   |                     |          }ddi}|                     |                     ||                    }|                     |dg           }|                     ||          S )a  
        fetch the funding rate for multiple markets

        https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list

        :param str[]|None symbols: list of unified market symbols
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a dictionary of `funding rate structures <https://docs.ccxt.com/?id=funding-rates-structure>`, indexed by market symbols
        r  r  r#  )r  r  r  r  r?  parse_funding_rates)r  r  r(  r  r*  r#  s         r   r+  zlbank.fetch_funding_ratesc  s     	%%g..G
 BB4;;wX^C_C_``0 ~~h33''g666r!  c                    |                                   |                     | j        di           }|                     |dd          }|                     |d|          }d}|dk    r|                                 }n/|dk    r|                                 }n|                                 }|                     |          S )a  
        query for balance and get the amount of funds available for trading or funds locked in orders

        https://www.lbank.com/en-US/docs/index.html#asset-information
        https://www.lbank.com/en-US/docs/index.html#account-information
        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>`
        rD   r   r   N(spotPrivatePostSupplementUserInfoAccountspotPrivatePostUserInfo)r  ry  r  rG  r0  r1  r   r  )r  r(  r  r  r   r*  s         r   fetch_balancezlbank.fetch_balance  s     	//$,CC(((<_``!!&(MBB???DDFFHH0003355HH==??H> !!(+++r!  r6  c                     |                      |d          }|                     |          }|||                     |d          |                     |d          d d dS )Nr`  makerCommissiontakerCommission)r<  r`  r   r   r  	tierBased)rG  r  rI  )r  r6  r|  r}  r`  s        r   parse_trading_feezlbank.parse_trading_fee  so     ##C22!!(++%%c+<==%%c+<==
 
 	
r!  c                     |                      |          }|                     |                     |d|d         i                    }|                     ||          S )a_  
        fetch the trading fees for a market

        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  )r|  fetch_trading_feesr  r  )r  r`  r(  r|  rP  s        r   fetch_trading_feezlbank.fetch_trading_fee  sT     V$$((Vj&QU,=W)X)XYY~~ff---r!  c                 F   |                                   i }|                     |                     ||                    }|                     |dg           }i }t	          dt          |                    D ]*}|                     ||                   }|d         }|||<   +|S )a_  
        fetch the trading fees for multiple markets

        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
        r#  r   r`  )r  )spotPrivatePostSupplementCustomerTradeFeer  ry  rC  rD  r7  )	r  r(  r  r*  r   rP  rQ  r6  r`  s	            r   r:  zlbank.fetch_trading_fees  s     	AA$++gW]B^B^__x44q#d))$$ 	! 	!A((a11C]F F6NNr!  rp  c                     |                                   |                     |          }|d         st          | j        dz             d|d<   |                     |dd|d|          S )a!  
        create a market buy order by providing the symbol and cost

        https://www.lbank.com/en-US/docs/index.html#place-order
        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>`
        r4   z9 createMarketBuyOrderWithCost() supports spot orders onlyFr   r|  r  N)r  r|  r&   r  r   )r  r`  rp  r(  r|  s        r   !create_market_buy_order_with_costz'lbank.create_market_buy_order_with_cost  ss     	V$$f~ 	ftw)ddeee6;23  5$fMMMr!  r)  r  rl  rm  c                    |                                   |                     |          }|                     |dd          }|                     |dd          }	|                     |d          }
|                     |g d          }d|d         i}|
d	k    }|
d
k    }|	p|
dk    }|dk    r|s|s|rt          | j        dz             |dk    rd||d<   |                     ||          |d<   | 	                    ||          |d<   |r|dz   dz   |d<   nR|r|dz   dz   |d<   nC|r|dz   dz   |d<   n4|dk    r-|dk    r&|dz   dz   |d<   | 	                    ||          |d<   n|dk    r|dz   dz   |d<   d}d}| 
                    |ddd          \  }}|                     |d          }|                     |d          }||                     ||          }n|ro|t          | j        dz             |                     |          }|                     |          }t          j        ||          }|                     ||          }n|                     ||          }||d<   |||d<   |                     | j        di           }|                     |dd          }|                     |d|          }|                     |d          }d}|d k    r*|                     |                     ||                    }n)|                     |                     ||                    }|                     |d!i           }|                     |                     |d"          |d#|          S )$a  
        create a trade order

        https://www.lbank.com/en-US/docs/index.html#place-order
        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>`
        	custom_idclientOrderIdpostOnlyFr   )rA  rB  r   rC  r`  r  r   r   r   r|  zw createOrder() does not allow market FOK, IOC, or postOnly orders. Only limit IOC, FOK, and postOnly orders are allowedr   r)  rm  rl  ra  iocfokr   sellr  NTr?   r   rp  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<  )r  r|  r  rJ  safe_string_upperr  r$   r  price_to_precisionamount_to_precisionhandle_option_and_paramsrI  cost_to_precisionnumber_to_stringr*   
string_mulry  r  rG  rG  r  r   
safe_order)r  r`  r)  r  rl  rm  r(  r|  rB  rC  r   r  rD  rE  r   quoteAmountr   rp  r  r  costRequestr  r  r   r*  rP  s                             r   r   zlbank.create_order  s     	V$$**6;PP>>&*e<<,,V]CC6#\#\#\]]fTl
 e#e#2kT1H3#tw  *c   c  d  d  d7??"GFO#66vuEEGG $ 8 8 H HGH 7"&*u"4 7"&*u"4 7"&*w"6Xv~~"&*x"7$($<$<VV$L$L!!"&*x"7"481<@<Y<YZ`bo  rU  W[  =\  =\916''776622#"&"8"8"F"FKK6 	I}*47  6q  ,q  r  r  r'+'<'<V'D'D&*&;&;E&B&B&-&8{&S&S&*&<&<V[&Q&Q"&"8"8"H"HK#. $#0GK //$,rBB(((<bcc!!&(MBB68,,11166t{{7F7S7STTHH@@WV\A]A]^^H 6266""6:66 
  
   	r!  statusc                 B    ddddddd}|                      |||          S )Ncanceledr  closed)z-101234)rG  )r  rS  statusess      r   parse_order_statuszlbank.parse_order_statusg  s:    
 
 &&999r!  r  c                    |                      |dd          }|                      |dd          }|                     |dd          }|                     |d          }|                     |d          }|                     ||          }d }d	}	d
}
|                      |dd          }|                    d          }|                     |d          }|                     |d          }|dk    rd}
|dk    rd}	d}|dk    rd}|dk    rd}|                     |d          }|                     |d          }d }|dk    r|                      |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*|          S )+NorderIdrH  rB  rA  r  create_timerS  r`  Fr   r)  r  ra  r   r   r|  r   Tr   rD  r   rE  r   rm  cummulativeQuoteQty
buy_marketorigQtyrl  executedQtydeal_amountr  r  r   lastTradeTimestampr   rC  r  r   rp  filled	remaining)r   r6  r<  r  )r  r  rG  r  rz  rP  r  r]  )r  r  r|  r  rB  r   	rawStatusr}  r   rC  r)  rawTyper~  r  r  rm  r  r  filledStrings                      r   parse_orderzlbank.parse_orderr  s   p y*==**5/;OO''v}EE	$$UH55	##E844!!(F33$$UFK@@c""q))##E1--xDwHKuKuK  00%%e-BCC
l""--eYIIL))%NN  
" 
] 
 Y// 
 	 

 !$ 
 d--i88 
 fX& 
 D 
 ; 
  
 D 
 U 
 D 
 J 
 l 
  l! 
" # 
$ + 
  
  
, -  	r!  r  c                 (   |                                   |                     |d          }|3|                     | j        di           }|                     |dd          }|dk    r|                     |||          S |                     |||          S )a  
        fetches information on an order made by the user

        https://www.lbank.com/en-US/docs/index.html#query-order
        https://www.lbank.com/en-US/docs/index.html#query-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>`
        r   Nra   r   )r  rG  ry  r  fetch_order_supplementfetch_order_default)r  r  r`  r(  r   r  s         r   fetch_orderzlbank.fetch_order  s     	!!&(33>oodlL"EEG%%gx9OPPF+++..r66BBB''FF;;;r!  c                 F   |t          | j        dz             |                                  |                     |          }|d         |d}|                     |                     ||                    }|                     |di           }|                     |          S )N( fetchOrder() requires a symbol argumentr  r`  r_  r#  )r   r  r  r|  #spotPrivatePostSupplementOrdersInfor  r  rl  )r  r  r`  r(  r|  r  r*  rP  s           r   rn  zlbank.fetch_order_supplement  s    >#DG.X$XYYYV$$Tl
 
 ;;DKKQW<X<XYY, &"55'''r!  c                    |t          | j        dz             |                                  |                     |          }|d         |d}|                     |                     ||                    }|                     |dg           }t          |          }|dk    r|                     |d                   S t          | j        dz             )Nrr  r  )r`  rH  r#  r   r   z0 fetchOrder() can only fetch one order at a time)
r   r  r  r|  spotPrivatePostOrdersInfor  ry  rD  rl  r    )	r  r  r`  r(  r|  r  r*  rP  	numOrderss	            r   ro  zlbank.fetch_order_default5  s    >#DG.X$XYYYV$$Tl
 
 11$++gv2N2NOO* 6266KK	>>##F1I... TW'YYZZZr!  c                     |t          | j        dz             |                                  |                     |          }|                     |d|          }|                     |d          }d|d         i}|||d<   |5|                     |d          |d<   |                     |dz   d          |d	<   |                     |                     ||                    }| 	                    |d
g           }| 
                    ||||          S )a  
        fetch all trades made by the user

        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  r  r|  ry  r  ymd!spotPrivatePostTransactionHistoryr  r?  r  )	r  r`  r  r   r(  r|  r  r*  r   s	            r   fetch_my_tradeszlbank.fetch_my_tradesa  s    >#DG.[$[\\\V$$e<<6<00fTl
 #GFO$(HHUC$8$8GL!"&((58+;S"A"AGJ99$++gv:V:VWW* &"55  >>>r!  c                    |t          | j        dz             |                                  |                     |          }|d}|d         d|d}|                     |                     ||                    }|                     |di           }|                     |dg           }	|                     |	|||          S )	a2  
        fetches information on multiple orders made by the user

        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  r  r|  *spotPrivatePostSupplementOrdersInfoHistoryr  ry  r?  parse_orders
r  r`  r  r   r(  r|  r  r*  rP  r  s
             r   fetch_orderszlbank.fetch_orders  s     >#DG.Y$YZZZV$$=ETl 
 
 BB4;;wX^C_C_``8 6266"55  >>>r!  c                    |t          | j        dz             |                                  |                     |          }|d}|d         d|d}|                     |                     ||                    }|                     |di           }|                     |dg           }	|                     |	|||          S )	a  
        fetch all unfilled currently open orders

        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#  r  )	r   r  r  r|  )spotPrivatePostSupplementOrdersInfoNoDealr  ry  r?  r  r  s
             r   fetch_open_orderszlbank.fetch_open_orders  s     >#DG.]$]^^^V$$=ETl 
 

 AA$++gW]B^B^__8 6266"55  >>>r!  c                    |t          | j        dz             |                                  |                     |dd          }|                     |ddg          }|                     |          }|d         |d}|||d<   |                     |                     ||                    }|                     |di           }| 	                    |          S )a  
        cancels an open order

        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origClientOrderIdrB  r  rs  r#  )
r   r  r  r  r  r|  $spotPrivatePostSupplementCancelOrderr  r  rl  )	r  r  r`  r(  rB  r|  r  r*  r#  s	            r   r   zlbank.cancel_order
  s     >#DG.Y$YZZZ**63FXX6$7#IJJV$$Tl
 
 $+8G'(<<T[[RX=Y=YZZ ~~h33%%%r!  c                 D   |t          | j        dz             |                                  |                     |          }d|d         i}|                     |                     ||                    }|                     |dg           }|                     |          S )a  
        cancel all open orders in a market

        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  r  r|  ,spotPrivatePostSupplementCancelOrderBySymbolr  r?  r  )r  r`  r(  r|  r  r*  r#  s          r   cancel_all_orderszlbank.cancel_all_orders2  s     >#DG.]$]^^^V$$fTl
 DDT[[QXZ`EaEabb$ ~~h33  &&&r!  c                     |                      | j        d          }|                     ||          }|                      | j        di           }|                     |d|          }|                     |||          }|S )Nr   r   r8  )ry  r  rI  rG  )r  currencyCoder(  r   defaultNetworkr   r8  s          r   get_network_code_for_currencyz#lbank.get_network_code_for_currencyX  sw    //$,8IJJ//NN??4<R@@((NKK""8Wg>>r!  r=  c                 X   |                                   |                     | j        di           }|                     |dd          }|                     |d|          }|                     |d          }d}|dk    r|                     ||          }n|                     ||          }|S )a  
        fetch the deposit address for a currency associated with self account

        https://www.lbank.com/en-US/docs/index.html#get-deposit-address
        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>`
        rK   r   r   NfetchDepositAddressSupplement)r  ry  r  rG  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J(((<XYY!!&(MBB68,,444<<T6JJHH99$GGHr!  c                    |                                   |                     |          }d|d         i}|                     ||          }|||d<   |                     |d          }|                     |                     ||                    }|                     |d          }|                     |d          }|                     |d          }	|||                     |                     |d                    ||	dS )	Nr-  r  netWorkr8  r#  addressmemor<  r  r8  r  tag)	r  r  r  r   spotPrivatePostGetDepositAddressr  ry  rG  rH  )
r  r=  r(  r  r  r8  r*  rP  r  r  s
             r   r  z#lbank.fetch_deposit_address_defaultw  s   ==&&$
 44T6BB!(GIYYvy11F88Wf9U9UVV 622""6955vv....t/?/?	/R/RSS
 
 	
r!  c                    |                                   |                     |          }d|d         i}|                     | j        d          }|                     |d          }|                     |||          }|||d<   |                     |d          }|                     |                     ||                    }|                     |d          }|                     |d          }	|                     |d          }
||d |	|
d	S )
Nr	  r  r   r8  networkNamer#  r  r  r  )	r  r  ry  r  rI  rG  r  *spotPrivatePostSupplementGetDepositAddressr  )r  r=  r(  r  r  r   r8  r*  rP  r  r  s              r   r  z&lbank.fetch_deposit_address_supplement  s   ==&&HTN
 ??4<<<((;;""8Wg>>%,GM"YYvy11FBB4;;wX^C_C_`` 622""6955vv..
 
 	
r!  r  r  c                    |                      ||          \  }}|                     |           |                                  |                     |d          }|                     |d          }|                     d|d           |                     |          }||d         ||d}|||d<   |                     |dd          }	|                     |ddg          }|                     | j	        d	          }
|                     |
|	|	          }|||d<   | 
                    |                     ||                    }|                     |d
i           }||                     |d          dS )a  
        make a withdrawal

        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>`
        r6  rs   r  )r  r	  rl  r6  Nr  r8  r  r   r#  
withdrawId)r<  r  )handle_withdraw_tag_and_paramscheck_addressr  rG  r  check_required_argumentr  safe_string_upper_2ry  r  !spotPrivatePostSupplementWithdrawr  )r  r=  rl  r  r  r(  r6  r  r  r8  r   rU  r*  rP  s                 r   rs   zlbank.withdraw  s    99#vFFV7###vu--65))$$Ze<<<==&&TN	
 
 ?!GFO**69mLL6I}#=>>??4<<<$$Xw@@	 %.GM"99$++gv:V:VWW 6266""6<88
 
 	
r!  c                 z    dddddddddddd}|                      |                     ||i           ||          S )	NpendingokfailedrU  transfer)rX  rY  rZ  r[  5)rX  rY  rZ  r[  )r4  
withdrawal)rG  ry  )r  rS  r)  r\  s       r   parse_transaction_statuszlbank.parse_transaction_status  sk       	 
 
 $ C CVVTTTr!  transactionr  c                    |                      |d          }d }|d}nd}|                      |d          }|                     |dd          }|                      |d          }d }d }	|dk    r|}n|}	|                     |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k    |dS )Nr  r4  r  txId
insertTime	applyTimer  rl  r	  coidrS  r6  )rp  r  r<  txidr   r  r8  r  	addressToaddressFromr  tagTotagFromr)  r  updatedr  )commentinternalr6  )rG  r  rI  r  rF  r  r  rH  )r  r  r  r  r)  r  r   r  r  r  rl  r  r=  rS  r6  r  s                   r   parse_transactionzlbank.parse_transaction	  sE   < k400:DDDV44''\;OO	"";	::	9!KKI!!+x88''VVDD
&&z8<<..t/?/?X/V/VX\]]"";66  C
K
"
 D
 	

 Y//
 t..t/?/?]/[/[\\
 w
 
 ;
 4
 T
 t
 D
 f
 
  f!
" t#
$ :-)
 
 
 	
r!  c                 b   |                                   i }d}| |                     |          }|d         |d<   |||d<   |                     |                     ||                    }|                     |di           }|                     |dg           }	|                     |	|||          S )a  
        fetch all deposits made to an account

        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)r  r  'spotPrivatePostSupplementDepositHistoryr  ry  r?  parse_transactions)
r  r=  r  r   r(  r  r  r*  r#  depositss
             r   fetch_depositszlbank.fetch_deposits[	  s     	
 }}T**H&tnGFO#(GK ??GU[@\@\]]0 x44>>$<<&&x5%HHHr!  c                 b   |                                   i }d}| |                     |          }|d         |d<   |||d<   |                     |                     ||                    }|                     |di           }|                     |dg           }	|                     |	|||          S )a  
        fetch all withdrawals made from an account

        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	  r  r#  r   )r  r  "spotPrivatePostSupplementWithdrawsr  ry  r?  r  )
r  r=  r  r   r(  r  r  r*  r#  r   s
             r   fetch_withdrawalszlbank.fetch_withdrawals	  s     	

 }}T**H&tnGFO#(GK ::4;;wPV;W;WXX6 x44NN4b99	&&y(E5IIIr!  codesc                    |                                   |                     d          }d}|du r|                     | j        di           }|                     |dd          }|                     |d|          }|                     |d          }|dk    r|                     |          }n+|                     |          }n|                     |          }|S )aE  
 @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>`
        FNTrn   r   r   fetchPublicTransactionFees)r  check_required_credentialsry  r  rG  r  fetch_public_transaction_feesfetch_private_transaction_fees)r  r  r(  isAuthorizedrP  r  r  r   s           r   fetch_transaction_feeszlbank.fetch_transaction_fees	  s     	66u==4oodl4JBOOG ,,Wh@]^^M%%fhFFFYYvx00F555;;FCC<<VDD77??Fr!  c                 V   |                                   |                                 }|                     |dg           }i }t          dt	          |                    D ]}||         }|                     |d          }|                     |          }|                     |dg           }	i ||<   t          dt	          |	                    D ]V}
|	|
         }|                     |d          }|4|                     |                     |d                    }|||         |<   W|i |dS )Nr#  r   r	  networkListwithdrawFeer  rs   r4  r<  )	r  r   ry  rC  rD  rG  rF  rI  rH  )r  r(  r*  rP  withdrawFeesrQ  entryr  r=  r  rS  rT  r6  rV  s                 r   r  z$lbank.fetch_private_transaction_fees	  sI    	99;;> 6266q#f++&& 	: 	:A1IE))%88J**:66D//%CCK!#L1c+..// : :*1~&&|]CC?"&"9"9$:J:J<Y_:`:`"a"aK69L&{3: %
 
 	
r!  c                    |                                   |                     |dd          }|                     |ddg          }i }| |                     |          }|d         |d<   |                     |                     ||                    }|                     |dg           }i }t          dt          |                    D ]}||         }	|                     |	d          }
|
dk    r| 	                    |	d          }| 
                    |          }|                     | 	                    |	d                    }||}| 	                    |	d	          }||         i ||<   |                     |          ||         |<   |i |d
S )Nr	  r-  r  r#  r   r5  truer.  r6  r  )r  r  r  r  r>  r  ry  rC  rD  rG  rF  rH  r  )r  r(  r=  r  r  r*  rP  r  rQ  r  canWithdrawr  r  r8  r6  s                  r   r  z#lbank.fetch_public_transaction_fees
  s    	!!&&+>>6FK#899}}T**H#+D>GK 44T[[&5Q5QRR, 6266q#f++&& 	J 	JA!9D//$>>Kf$$!--dK@@
 33J??	11$2B2B42Q2QRR?'G&&tU33	*2.0L+373D3DS3I3IY'0$
 
 	
r!  c                    |                                   |                     d          }d}|du r|                     | j        di           }|                     |dd          }|                     |d|          }|                     |d          }|dk    r|                     ||          }n-|                     ||          }n|                     ||          }|S )ap  
        when using private endpoint, only returns information for currencies with non-zero balance, use public method by specifying self.options['fetchDepositWithdrawFees']['method'] = 'fetchPublicDepositWithdrawFees'

        https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
        https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations

        :param str[] [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>`
        FNTrP   r   r   fetchPublicDepositWithdrawFees)r  r  ry  r  rG  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_feesJ
  s     	66u==4oodl4NPRSSG ,,Wh@abbM%%fhFFFYYvx00F999BB5&QQCCE6RR>>ufMMHr!  c                     |                                   |                     |          }|                     |dg           }|                     ||d          S )Nr#  r	  )r  r   r?  parse_deposit_withdraw_fees)r  r  r(  r*  r#  s        r   r  z)lbank.fetch_private_deposit_withdraw_feese
  sX     	99&AA> ~~h33//eVDDDr!  c                     |                                   i }|                     |                     ||                    }|                     |dg           }|                     ||          S )Nr#  )r  r>  r  ry  "parse_public_deposit_withdraw_fees)r  r  r(  r  r*  r#  s         r   r  z(lbank.fetch_public_deposit_withdraw_fees
  si     	44T[[&5Q5QRR, x4466tUCCCr!  c                    i }t          dt          |                    D ]+}||         }|                     |d          }|du r|                     |d          }|                     |          }||                     ||          r|                     |d          }	|	|                     ||          }
|
|                     |g          ||<   n#||         d         }|                    |           | 	                    |                     |d                    }||	d dd d dd	||         d
         |<   |	d d||         d<   -|S )Nr   r5  Tr-  r6  r<  r.  r6  r  r3  r   rs   )
rC  rD  ry  rG  rF  in_arrayrI  deposit_withdraw_feer{  rH  )r  r*  r  rP  rQ  r6  r  r  r=  r  resultValueresultCodeInforV  s                r   r  z(lbank.parse_public_deposit_withdraw_fees
  s   " q#h--(( 	 	A1+C//#}==Kd""!--c;??
..z::=DMM$$>$>="&"2"23">">K".&*oofd&C&C&.+/+D+DcU+K+KF4LL-3D\&-AN*11#666&*&=&=d>N>NsT[>\>\&]&]&2 ,726-" -"
 ,026," ,"	E 	EF4L4[AA (3.28 8F4L4 r!  c                    |                      |          }|                     |dg           }t          dt          |                    D ]}||         }|                     |                     |d                    }|                     |d          }|                     |d          }	||	r|d d|d<   |d dd d dd|d	         |<   |S )
Nr  r   r  r  	isDefaultr  rs   r3  r   )r  ry  rC  rD  rH  rG  rI  )
r  r6  r  rP  r  rS  rT  rV  r  r  s
             r   parse_deposit_withdraw_feez lbank.parse_deposit_withdraw_fee
  s	   6 **3//ooc="==q#k**++ 	 	A&q>L11$2B2B<QW2X2XYYK**<GGKkBBI& *&** *F:&  +&*! !
  $&*   	3 	3z";/ r!  r   GETc           
         |                      ||                     |                    }| j        d         d         dz   | j        z   dz   |                     ||          z   }|d         dk    r|dz  }n-| j        d         d         dz   |                     ||          z   }|d         d	k    r2|r.|d
|                     |                     |                    z   z  }na|                                  t          | 	                                          }	| 
                                |                                 z   }
|                     d| j        i|          }d }t          | j                  dk    rd}nd}|                     |                     |                     |
||	d|                              }|                     |          }|                     |d          }|                                }d }|dk    r|                     | j        dd          }d }|rU|                     | j        d          }|7|                     |                     | j                            }|| j        d<   n-|                     |                     | j                            }|                     ||d          }nR|dk    rL|                     |                     |          |                     | j                  t4          j                  }||d<   |                     |                     |                    }d|	||
d}||||dS )Nr   r   rb  r   r4   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  rE  r  uuid22uuid16r  apiKeyrD  secret	rawencodeencodehashupperrJ  r  ry  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  s7   		&$"5"5d";";<<iv&,t|;cADDWDWX\^dDeDeeq6V5LCC)E":.4t7J7J4QW7X7XXCq6X AsT^^DLL,?,?@@@@++---D--//00Ikkmmdkkmm3GKK4;! E #O4;"$$"'".>>$,,t{{"$3&< < 	0 0 # #  D
 kk$''G99We,,D JJLLMD%''#'>>$,@RTX#Y#Y # O//$,>>C{"88T[9Q9QRR.1U+44T[[5M5MNNCxxsH== L00yy]!;!;T[[=U=UW^Weff E&M>>$,,u"5"566D C&$3"	 G fdwOOOr!  c                    d}t          |          dz
  }|                     ||z            }|                     |d          }d}t          d|          D ]2}||z  }|                     ||          }|| j        ||         dz   z  }3|dz   S )N@   r   r   z-----BEGIN PRIVATE KEY-----

z-----END PRIVATE KEY-----)rD  r  sumrC  r  )	r  r  
lineLengthsecretLengthnumLinesr  rQ  startends	            r   r  zlbank.convert_secret_to_pemH  s    
6{{Q$$\J%>??88Ha((-q(## 	1 	1A
NE((5*--C4;uSy)D00CC000r!  httpCodereasonr  r   r  r  c
                 ,   |d S |                      |d          }
|
dk    s|
sp|                     |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/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||                     |                    }|                      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                    } ||          d S )iNrP  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)rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  )ry  rG  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_errorsT  sa   4//(H5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( 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( 5( 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( 5(j $))H--k5/ 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*. /2*0 12*2 32*4 52*6 72*8 92*: ;2*< =2*> )?2*@ )A2*B C2*D *E2* 2*F '&&##&'&####&")c2* 2* 2*d -e2) 2)Jf *W%%%tr!  )N)V__name__
__module____qualname__r   r  r
   r+  r   rW  r   r   r^  rY  rZ  dictr   r  rE  r  r   r   r  r   r  r   r  r  rA  r  r  r   r  r   r)  r,  r   r+  r2  r   r7  r;  r   r:  floatr?  r   r   r   r   r   r]  r   rl  rp  rn  ro  r~  r  r  r   r  r  r	   r  r  r  r   rs   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  intr\  __classcell__)r  s   @r   r,   r,      s
       ]# ] ] ] ] ] ]~
 !# %3 %3s %3 %3 %3 %3N ') b bZ b b b bH $& I I$v, I I I I" )+ M M M M^ )+ ^ ^ ^ ^@: :4 : :6 : : : :x 02 *0 *03 *0f *0 *0 *0 *0X 04B J1 J1W J17 J1 J1 J1 J1X :>b P] P]s P]3 P]Y P] P] P] P]d[ [ [v [ [ [ [ [z 6:UW 2? 2?3 2?s 2?# 2?\`af\g 2? 2? 2? 2?h
 
 
4 
 
 
 
( 9=4^bkm 4J 4J# 4J# 4JS 4JX[ 4Jrvw{r| 4J 4J 4J 4Jl{ { { { {z,
 ,
 ,
; ,
 ,
 ,
 ,
\ 68 B B BK B B B B 6:" (7 (77 (7 (7 (7 (7 (7T $& 4, 4,( 4, 4, 4, 4,l
 
T 
6 
EX 
 
 
 
& 57 . . .;N . . . . )+  {    ( RT N N N5 N N N N& gksu Z Z3 Zi Zy ZRW Z`c Z Z Z Zx	: 	: 	: 	: 	:J J Jv J J J J JX 26b < <c <3 < < < <* =A  (  (  (c  (  (  (  (D :>b *[ *[c *[3 *[ *[ *[ *[X -1tRV_a 6? 6?c 6? 6?C 6? 6? 6? 6?p *.Dt\^ 8? 8?3 8?c 8? 8?cghmcn 8? 8? 8? 8?t /3TXac 5? 5? 5?3 5?c 5?hlmrhs 5? 5? 5? 5?n 37r && &&s &&C && && && &&P /32 $' $' $' $' $' $'L   79  # ^    . ?A !
 !
# !
^ !
 !
 !
 !
F BD #
 #
S #
 #
 #
 #
 #
J KOWY 9
 9
S 9
% 9
# 9
C 9
^i 9
 9
 9
 9
vU U U$M
 M
T M
X M
Q\ M
 M
 M
 M
^ *.Dt\^ 1I 1I3 1Ic 1I 1Icghsct 1I 1I 1I 1If -1tRV_a 5J 5Jc 5J 5JC 5Jfjkvfw 5J 5J 5J 5Jn 7;2  G    2 57 5
 5
 5
 5
n 46 3
 3
 3
 3
j <@      6 9=R $E $E $E $EL 8<B D D D D<2 2 2 2h2 2 2 2 2 2h &eBSW 5P 5P 5P 5Pn
1 
1 
1pc p3 pS p# pX\ pdg p p p p p p p pr!  r,   )1ccxt.base.exchanger   ccxt.abstract.lbankr   r  ccxt.base.typesr   r   r   r   r	   r
   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>rl     s   ( ' ' ' ' ' + + + + + +  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z       * * * * * * 0 0 0 0 0 0 - - - - - - . . . . . . ' ' ' ' ' ' & & & & & & . . . . . . + + + + + + ) ) ) ) ) ) - - - - - - ) ) ) ) ) ) . . . . . . ) ) ) ) ) ) 4 4 4 4 4 4 % % % % % %h. h. h. h. h.Hk h. h. h. h. h.r!  