
    ei                    l   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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/m0Z0  G d dee          Z1d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    V/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/async_support/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                    K   d}|                      dd|          \  }}d}|dk    r|                     |           d{V }n|                     |           d{V }|                     |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~  s       99+tVTTf6>>!II&QQQQQQQQHH!88@@@@@@@@H*   6222r!  c                   K   |                      |           d{V }|                     |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
        Nr#  	assetCoder   chain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  sy      ::6BBBBBBBB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                    K   |                      |          |                     |          g}t          j        |  d{V }|                     |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
        Nr   r   )fetch_spot_marketsfetch_swap_marketsasynciogatherarray_concat)r  r(  marketsPromisesresolvedMarketss       r   fetch_marketszlbank.fetch_markets	  sq       ##F++##F++
 !( @@@@@@@  !3_Q5GHHHr!  c                   K   |                      |           d {V }|                     |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   rn  ro  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partsrg  rh  re  rf  rb  s                 r   rY  zlbank.fetch_spot_markets  s     33F;;;;;;;;  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                 *  K   ddi}|                      |                     ||                     d {V }|                     |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   rb  baseCurrencyclearCurrencyrd  :r  re  rf  ri  rg  rh  rj  r)  r6   r4   Fr5   Tr7   r8   r:  r   r  volumeMultiple
volumeTick	priceTickrm  r0  minOrderVolumemaxOrderVolumepriceLimitLowerValuepriceLimitUpperValueminOrderCostrq  rs  )	*contractPublicGetCfdOpenApiV1PubInstrumentextendr{  rC  rD  rG  rF  r}  rI  )r  r(  requestr*  r#  rP  rQ  r~  r  rg  rj  rh  re  rf  ri  rb  s                   r   rZ  zlbank.fetch_swap_marketsi  s%     G
 HHU\^dIeIeffffffff: 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   rb  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_symbolr{  safe_marketsafe_tickeriso8601safe_string_2)r  r   r~  r   r  rb  
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!  rb  c                   K   |                                   d{V  |                     |          }|d         r?|                     |d         g|           d{V }|                     ||d                   S d|d         i}|                     |                     ||                     d{V }|                     |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>`
        Nr6   rb  r  r#  r   )load_marketsr~  fetch_tickersr{  spotPublicGetTicker24hrr  	safe_dictr  )	r  rb  r(  r~  responseForSwapr  r*  r#  firsts	            r   fetch_tickerzlbank.fetch_ticker  s      !!!!!!!!!V$$&> 	F$($6$6x8H7I6$R$RRRRRRRO???F84DEEEfTl
 55dkk'66R6RSSSSSSSS, x44tQ++  ///r!  symbolsc                 D  K   |                                   d{V  d}|E|                     |          }t          |          }|dk    r|                     |d                   }i }d}|                     d||          \  }}d}|dk    r5d|d<   |                     |                     ||                     d{V }n4d|d<   |                     |                     ||                     d{V }|                     |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  allrb  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_tickers1  sU      !!!!!!!!!))'22GLLMq  WQZ0099.&RXYYf6>>&-GN#!LLT[[Y`bhMiMijjjjjjjjHH %GH!99$++gv:V:VWWWWWWWWH\ ~~h33!!$000r!  r   c           	        K   |                                   d{V  |                     |          }|d}d|d         i}d}|                     d||          \  }}d}|dk    r5||d<   |                     |                     ||                     d{V }n4||d<   |                     |                     ||                     d{V }|                     |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<   rb  r  rb   r6   r   sizer#  bidsasksro  r  )	r  r~  r$  +contractPublicGetCfdOpenApiV1PubMarketOrderr  spotPublicGetDepthr{  millisecondsparse_order_book)
r  rb  r   r(  r~  r  r)  r*  	orderbookr   s
             r   fetch_order_bookzlbank.fetch_order_book}  s      !!!!!!!!!V$$=EfTl
 99:JFTZ[[f6>>$GG!MMdkkZaciNjNjkkkkkkkkHH#GFO!44T[[&5Q5QRRRRRRRRHb 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dealTimern  qtydealQuantityro  	dealPricequoteQtydealVolumePrice	tradeTyper)  rc  r   r   r   r   r~  r   tidr  txUuid	orderUuidtradeFeebuyre  rf  tradeFeeRate)rr  currencyrate)r   r  rb  r  orderr)  takerOrMakersidero  rn  rr  r6  r<  )safe_integer_2r'  r  rG  r|  r  
safe_trader  )r  r  r~  r   amountStringpriceString
costStringr  r)  r  r  typePartr  r  rb  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                   K   |                                   d{V  |                     |          }d|d         i}|||d<   |t          |d          |d<   nd|d<   |                     | j        di           }|                     |dd	          }|                     |d|          }	|                     |d          }d}
|	d
k    r0|                     |                     ||                     d{V }
n/| 	                    |                     ||                     d{V }
| 
                    |
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>`
        Nrb  r  r  iX  r  rl   r   r   spotPublicGetSupplementTradesr#  )r  r~  r/  r{  r  rG  omitr  r  r   r?  parse_trades)r  rb  r  r   r(  r~  r  r  defaultMethodr   r*  r   s               r   fetch_tradeszlbank.fetch_trades,  s      !!!!!!!!!V$$fTl
 #GFO!%ooGFOO!GFO//$,rBB(((<QRR!!&(MBB68,,444!??GU[@\@\]]]]]]]]HH!55dkk'66R6RSSSSSSSSH" &"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                 P  K   |                                   d{V  |                     |          }|d}nt          |d          }|2|                     |          }|                                 |dz  |z  z
  }|d         |                     | j        ||          |                     |dz            t          |dz   d          d}|                     | 	                    ||                     d{V }	| 
                    |	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   )rb  r)  r  r  r#  )r  r~  r/  parse_timeframer  rG  r  parse_to_intspotPublicGetKliner  r?  parse_ohlcvs)r  rb  r  r  r   r(  r~  durationr  r*  ohlcvss              r   fetch_ohlcvzlbank.fetch_ohlcvt  sG      !!!!!!!!!V$$=EEt$$E=++I66H%%''8d?U+BCETl$$T_iKK%%edl33	4((	
 
 00Wf1M1MNNNNNNNN&"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  r{  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 )Nrb  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  rb  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                    K   |                                   d{V  |                     |          }|                     |d         g|           d{V }|                     ||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>`
        Nrb  )r  r~  fetch_funding_ratesr{  )r  rb  r(  r~  r  s        r   fetch_funding_ratezlbank.fetch_funding_rateU  s       !!!!!!!!!V$$ $ 8 8&:J9KV T TTTTTTTx0@AAAr!  c                 $  K   |                                   d{V  |                     |          }ddi}|                     |                     ||                     d{V }|                     |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
        Nr  r  r#  )r  r  r  r  r?  parse_funding_rates)r  r  r(  r  r*  r#  s         r   r-  zlbank.fetch_funding_ratesd  s       !!!!!!!!!%%g..G
 HHU\^dIeIeffffffff0 ~~h33''g666r!  c                   K   |                                   d{V  |                     | j        di           }|                     |dd          }|                     |d|          }d}|dk    r|                                  d{V }n;|dk    r|                                  d{V }n|                                  d{V }|                     |          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>`
        NrD   r   r   (spotPrivatePostSupplementUserInfoAccountspotPrivatePostUserInfo)r  r{  r  rG  r2  r3  r   r  )r  r(  r  r  r   r*  s         r   fetch_balancezlbank.fetch_balance  s      !!!!!!!!!//$,CC(((<_``!!&(MBB???!JJLLLLLLLLHH000!99;;;;;;;;HH!CCEEEEEEEEH> !!(+++r!  r6  c                     |                      |d          }|                     |          }|||                     |d          |                     |d          d d dS )Nrb  makerCommissiontakerCommission)r<  rb  r   r   r  	tierBased)rG  r  rI  )r  r6  r~  r  rb  s        r   parse_trading_feezlbank.parse_trading_fee  so     ##C22!!(++%%c+<==%%c+<==
 
 	
r!  c                    K   |                      |          }|                     |                     |d|d         i                     d{V }|                     ||          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  N)r~  fetch_trading_feesr  r  )r  rb  r(  r~  rP  s        r   fetch_trading_feezlbank.fetch_trading_fee  sl       V$$..t{{6JPVW[P\C]/^/^________~~ff---r!  c                 b  K   |                                   d{V  i }|                     |                     ||                     d{V }|                     |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
        Nr#  r   rb  )r  )spotPrivatePostSupplementCustomerTradeFeer  r{  rC  rD  r9  )	r  r(  r  r*  r   rP  rQ  r6  rb  s	            r   r<  zlbank.fetch_trading_fees  s       !!!!!!!!!GGT[]cHdHdeeeeeeeex44q#d))$$ 	! 	!A((a11C]F F6NNr!  rr  c                    K   |                                   d{V  |                     |          }|d         st          | j        dz             d|d<   |                     |dd|d|           d{V 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>`
        Nr4   z9 createMarketBuyOrderWithCost() supports spot orders onlyFr   r~  r  )r  r~  r&   r  r   )r  rb  rr  r(  r~  s        r   !create_market_buy_order_with_costz'lbank.create_market_buy_order_with_cost  s       !!!!!!!!!V$$f~ 	ftw)ddeee6;23&&vxdFSSSSSSSSSr!  r)  r  rn  ro  c                   K   |                                   d{V  |                     |          }|                     |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    r0|                     |                     ||                     d{V }n/|                     |                     ||                     d{V }|                     |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>`
        N	custom_idclientOrderIdpostOnlyFr   )rC  rD  r   rE  rb  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)  ro  rn  rc  iocfokr   sellr  Tr?   r   rr  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_mulr{  r  rG  rI  r  r   
safe_order)r  rb  r)  r  rn  ro  r(  r~  rD  rE  r   r  rF  rG  r   quoteAmountr   rr  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!<<T[[RX=Y=YZZZZZZZZHH!FFt{{SZ\bGcGcddddddddH 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  rU  statusess      r   parse_order_statuszlbank.parse_order_statush  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orderIdrJ  rD  rC  r  create_timerU  rb  Fr   r)  r  rc  r   r   r~  r   Tr   rF  r   rG  r   ro  cummulativeQuoteQty
buy_marketorigQtyrn  executedQtydeal_amountr  r  r   lastTradeTimestampr   rE  r  r   rr  filled	remaining)r   r6  r<  r  )r  r  rG  r  r|  rR  r  r_  )r  r  r~  r  rD  r   	rawStatusr  r   rE  r)  rawTyper  r  r  ro  r  r  filledStrings                      r   parse_orderzlbank.parse_orders  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                 P  K   |                                   d{V  |                     |d          }|3|                     | j        di           }|                     |dd          }|dk    r|                     |||           d{V S |                     |||           d{V 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>`
        Nr   ra   r   )r  rG  r{  r  fetch_order_supplementfetch_order_default)r  r  rb  r(  r   r  s         r   fetch_orderzlbank.fetch_order  s       !!!!!!!!!!!&(33>oodlL"EEG%%gx9OPPF+++44RHHHHHHHHH--b&&AAAAAAAAAr!  c                 b  K   |t          | j        dz             |                                  d {V  |                     |          }|d         |d}|                     |                     ||                     d {V }|                     |di           }|                     |          S )N( fetchOrder() requires a symbol argumentr  rb  ra  r#  )r   r  r  r~  #spotPrivatePostSupplementOrdersInfor  r  rn  )r  r  rb  r(  r~  r  r*  rP  s           r   rp  zlbank.fetch_order_supplement  s      >#DG.X$XYYY!!!!!!!!!V$$Tl
 
 AA$++gW]B^B^________, &"55'''r!  c                   K   |t          | j        dz             |                                  d {V  |                     |          }|d         |d}|                     |                     ||                     d {V }|                     |dg           }t          |          }|dk    r|                     |d                   S t          | j        dz             )Nrt  r  )rb  rJ  r#  r   r   z0 fetchOrder() can only fetch one order at a time)
r   r  r  r~  spotPrivatePostOrdersInfor  r{  rD  rn  r    )	r  r  rb  r(  r~  r  r*  rP  	numOrderss	            r   rq  zlbank.fetch_order_default6  s      >#DG.X$XYYY!!!!!!!!!V$$Tl
 
 77GV8T8TUUUUUUUU* 6266KK	>>##F1I... TW'YYZZZr!  c                 <  K   |t          | j        dz             |                                  d{V  |                     |          }|                     |d|          }|                     |d          }d|d         i}|||d<   |5|                     |d          |d<   |                     |dz   d          |d	<   |                     |                     ||                     d{V }| 	                    |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_daterb  r  r  -i \&end_dater#  )r   r  r  r~  r{  r  ymd!spotPrivatePostTransactionHistoryr  r?  r  )	r  rb  r  r   r(  r~  r  r*  r   s	            r   fetch_my_tradeszlbank.fetch_my_tradesb  sA      >#DG.[$[\\\!!!!!!!!!V$$e<<6<00fTl
 #GFO$(HHUC$8$8GL!"&((58+;S"A"AGJ??GU[@\@\]]]]]]]]* &"55  >>>r!  c                   K   |t          | j        dz             |                                  d{V  |                     |          }|d}|d         d|d}|                     |                     ||                     d{V }|                     |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   rb  current_pagepage_lengthr#  orders)	r   r  r  r~  *spotPrivatePostSupplementOrdersInfoHistoryr  r{  r?  parse_orders
r  rb  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 
 
 HHU\^dIeIeffffffff8 6266"55  >>>r!  c                   K   |t          | j        dz             |                                  d{V  |                     |          }|d}|d         d|d}|                     |                     ||                     d{V }|                     |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  r{  r?  r  r  s
             r   fetch_open_orderszlbank.fetch_open_orders  s       >#DG.]$]^^^!!!!!!!!!V$$=ETl 
 

 GGT[]cHdHdeeeeeeee8 6266"55  >>>r!  c                   K   |t          | j        dz             |                                  d{V  |                     |dd          }|                     |ddg          }|                     |          }|d         |d}|||d<   |                     |                     ||                     d{V }|                     |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origClientOrderIdrD  r  ru  r#  )
r   r  r  r  r  r~  $spotPrivatePostSupplementCancelOrderr  r  rn  )	r  r  rb  r(  rD  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'(BB4;;wX^C_C_```````` ~~h33%%%r!  c                 `  K   |t          | j        dz             |                                  d{V  |                     |          }d|d         i}|                     |                     ||                     d{V }|                     |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 argumentrb  r  r#  )r   r  r  r~  ,spotPrivatePostSupplementCancelOrderBySymbolr  r?  r  )r  rb  r(  r~  r  r*  r#  s          r   cancel_all_orderszlbank.cancel_all_orders3  s       >#DG.]$]^^^!!!!!!!!!V$$fTl
 JJ4;;W^`fKgKghhhhhhhh$ ~~h33  &&&r!  c                     |                      | j        d          }|                     ||          }|                      | j        di           }|                     |d|          }|                     |||          }|S )Nr   r   r8  )r{  r  rK  rG  )r  currencyCoder(  r   defaultNetworkr   r8  s          r   get_network_code_for_currencyz#lbank.get_network_code_for_currencyY  sw    //$,8IJJ//NN??4<R@@((NKK""8Wg>>r!  r=  c                   K   |                                   d{V  |                     | j        di           }|                     |dd          }|                     |d|          }|                     |d          }d}|dk    r|                     ||           d{V }n|                     ||           d{V }|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>`
        NrK   r   r   fetchDepositAddressSupplement)r  r{  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_addressa  s       !!!!!!!!!//$,0ErJJ(((<XYY!!&(MBB68,,444!BB4PPPPPPPPHH!??fMMMMMMMMHr!  c                   K   |                                   d {V  |                     |          }d|d         i}|                     ||          }|||d<   |                     |d          }|                     |                     ||                     d {V }|                     |d          }|                     |d          }|                     |d          }	|||                     |                     |d                    ||	dS )	Nr-  r  netWorkr8  r#  addressmemor<  r  r8  r  tag)	r  r  r  r   spotPrivatePostGetDepositAddressr  r{  rG  rH  )
r  r=  r(  r  r  r8  r*  rP  r  r  s
             r   r  z#lbank.fetch_deposit_address_defaultx  s4     !!!!!!!!!==&&$
 44T6BB!(GIYYvy11F>>t{{7TZ?[?[\\\\\\\\ 622""6955vv....t/?/?	/R/RSS
 
 	
r!  c                 4  K   |                                   d {V  |                     |          }d|d         i}|                     | j        d          }|                     |d          }|                     |||          }|||d<   |                     |d          }|                     |                     ||                     d {V }|                     |d          }|                     |d          }	|                     |d          }
||d |	|
d	S )
Nr  r  r   r8  networkNamer#  r  r  r  )	r  r  r{  r  rK  rG  r  *spotPrivatePostSupplementGetDepositAddressr  )r  r=  r(  r  r  r   r8  r*  rP  r  r  s              r   r  z&lbank.fetch_deposit_address_supplement  sC     !!!!!!!!!==&&HTN
 ??4<<<((;;""8Wg>>%,GM"YYvy11FHHU\^dIeIeffffffff 622""6955vv..
 
 	
r!  r  r  c                   K   |                      ||          \  }}|                     |           |                                  d{V  |                     |d          }|                     |d          }|                     d|d           |                     |          }||d         ||d}|||d<   |                     |dd          }	|                     |ddg          }|                     | j	        d	          }
|                     |
|	|	          }|||d<   | 
                    |                     ||                     d{V }|                     |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>`
        Nr6  rs   r  )r  r  rn  r6  r  r8  r  r   r#  
withdrawId)r<  r  )handle_withdraw_tag_and_paramscheck_addressr  rG  r  check_required_argumentr  safe_string_upper_2r{  r  !spotPrivatePostSupplementWithdrawr  )r  r=  rn  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"??GU[@\@\]]]]]]]] 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failedrW  transfer)rZ  r[  r\  r]  5)rZ  r[  r\  r]  )r4  
withdrawal)rG  r{  )r  rU  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  rn  r  coidrU  r6  )rr  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  rn  r  r=  rU  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                 ~  K   |                                   d{V  i }d}| |                     |          }|d         |d<   |||d<   |                     |                     ||                     d{V }|                     |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  r{  r?  parse_transactions)
r  r=  r  r   r(  r  r  r*  r#  depositss
             r   fetch_depositszlbank.fetch_deposits\	  s       !!!!!!!!!
 }}T**H&tnGFO#(GK EEdkkRY[aFbFbcccccccc0 x44>>$<<&&x5%HHHr!  c                 ~  K   |                                   d{V  i }d}| |                     |          }|d         |d<   |||d<   |                     |                     ||                     d{V }|                     |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  r{  r?  r  )
r  r=  r  r   r(  r  r  r*  r#  r   s
             r   fetch_withdrawalszlbank.fetch_withdrawals	  s       !!!!!!!!!

 }}T**H&tnGFO#(GK @@WV\A]A]^^^^^^^^6 x44NN4b99	&&y(E5IIIr!  codesc                   K   |                                   d{V  |                     d          }d}|du r|                     | j        di           }|                     |dd          }|                     |d|          }|                     |d          }|dk    r|                     |           d{V }n7|                     |           d{V }n|                     |           d{V }|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>`
        NFTrn   r   r   fetchPublicTransactionFees)r  check_required_credentialsr{  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#AA&IIIIIIII#BB6JJJJJJJJ==fEEEEEEEEFr!  c                 r  K   |                                   d {V  |                                  d {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   r{  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	  sq      !!!!!!!!!??AAAAAAAA> 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                 6  K   |                                   d {V  |                     |dd          }|                     |ddg          }i }| |                     |          }|d         |d<   |                     |                     ||                     d {V }|                     |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  r{  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;;wPV;W;WXXXXXXXX, 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                   K   |                                   d{V  |                     d          }d}|du r|                     | j        di           }|                     |dd          }|                     |d|          }|                     |d          }|dk    r|                     ||           d{V }n9|                     ||           d{V }n|                     ||           d{V }|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>`
        NFTrP   r   r   fetchPublicDepositWithdrawFees)r  r  r{  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_feesK
  s6      !!!!!!!!!66u==4oodl4NPRSSG ,,Wh@abbM%%fhFFFYYvx00F999!%!H!HPV!W!WWWWWWW!%!I!I%QW!X!XXXXXXX!DDUFSSSSSSSSHr!  c                    K   |                                   d {V  |                     |           d {V }|                     |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_feesf
  s       !!!!!!!!!??GGGGGGGG> ~~h33//eVDDDr!  c                    K   |                                   d {V  i }|                     |                     ||                     d {V }|                     |dg           }|                     ||          S )Nr#  )r  r>  r  r{  "parse_public_deposit_withdraw_fees)r  r  r(  r  r*  r#  s         r   r  z(lbank.fetch_public_deposit_withdraw_fees
  s       !!!!!!!!!::4;;wPV;W;WXXXXXXXX, 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  r{  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  r{  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   rd  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  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  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_pemI  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)rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  )r{  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_errorsU  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-  r4  r   r9  r=  r   r<  floatrA  r   r   r   r   r   r_  r   rn  rr  rp  rq  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,      s6
       ]# ] ] ] ] ] ]~
 ') %3 %3S %3 %3 %3 %3N -/ b b: b b b bH *, I IV I I I I" /1 M M M M^ /1 ^ ^ ^ ^@: :4 : :6 : : : :x 68 *0 *0 *0F *0 *0 *0 *0X 6:" J1 J17 J1 J1 J1 J1 J1X @DB P] P]S P] P]S\ P] P] P] P]d[ [ [v [ [ [ [ [z <@d[] 2? 2? 2?S 2? 2?bfglbm 2? 2? 2? 2?h
 
 
4 
 
 
 
( ?CQUdhqs 4J 4J 4J 4J3 4J^a 4Jx|  ~B  yC 4J 4J 4J 4Jl{ { { { {z,
 ,
 ,
; ,
 ,
 ,
 ,
\ <> B Bs B+ B B B B <@ (7 (7 (7| (7 (7 (7 (7T *, 4, 4, 4, 4, 4, 4,l
 
T 
6 
EX 
 
 
 
& ;= . .c .AT . . . . /1  [    ( XZ T Tc T T T T T& mqy{ Z Z ZI ZY ZX] Zfi Z Z Z Zx	: 	: 	: 	: 	:J J Jv J J J J JX 8<B B BC B B B B B* CGr  (  (s  (C  (  (  (  (D @DB *[ *[C *[ *[ *[ *[ *[X 37TX\eg 6? 6?C 6?s 6?RU 6? 6? 6? 6?p 04$UYbd 8? 8? 8?C 8?s 8?imnsit 8? 8? 8? 8?t 59tZ^gi 5? 5?c 5? 5?TW 5?nrsxny 5? 5? 5? 5?n 9=R && &&S &&# && && && &&P 59 $' $'c $' $' $' $'L   =?   >    . EG !
 !
 !
> !
 !
 !
 !
F HJ #
 #
3 #
n #
 #
 #
 #
J QU]_ 9
 9
3 9
 9
 9
# 9
do 9
 9
 9
 9
vU U U$M
 M
T M
X M
Q\ M
 M
 M
 M
^ 04$UYbd 1I 1I 1IC 1Is 1Iimnyiz 1I 1I 1I 1If 37TX\eg 5J 5JC 5Js 5JRU 5Jlpq|l} 5J 5J 5J 5Jn =A  '    2 ;= 5
 5
 5
 5
n :< 3
 3
 3
 3
j BFb  w    6 ?C2 $E $E $E $EL >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,   )2 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   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>rn     s   6 5 5 5 5 5 + + + + + +   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!  