
    !:hj{                    P   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.  G d dee      Z/y)    )Exchange)ImplicitAPIN)AnyBalances
CurrenciesCurrencyDepositAddressIntLedgerEntryMarketNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickersTradeTradingFeeInterfaceTradingFeesTransactionTransferEntry)List)ExchangeError)AuthenticationError)PermissionDenied)
BadRequest)InsufficientFunds)InvalidAddress)InvalidOrder)OrderNotFound)NotSupported)ExchangeNotAvailable)OnMaintenance)InvalidNonce)	TICK_SIZE)Precisec                       e Zd Zdef fdZi fdee   fdZd Zi fdZ	i fde
fdZdi fded	edefd
ZdVd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 Zd ZdVdededefdZddi fdeded	edee   fdZdVdedefdZdddi fdeded	edee   fdZdefdZ i fdefdZ!i fdede"fdZ#dVdedede"fdZ$d Z%i fde&fd Z'di fd!efd"Z(dVd#Z)di fd$Z*dVd%Z+di fded&e,d'e-d(e.d)e/f
d*Z0di fd+ede1fd,Z2di fde1fd-Z3d.e1fd/Z4di fd+ede1fd0Z5di fd+ede1fd1Z6dddi fde1ded	efd2Z7dddi fd3e1ded	edee8   fd4Z9dddi fd3e1ded	edee8   fd5Z:dVd6ed7e;de8fd8Z<d.e1fd9Z=dVd:edede>fd;Z?d< Z@dVd=ed7e;deAfd>ZBdddi fd3e1ded	edeeA   fd?ZCdddi fde1ded	edee>   fd@ZDdA ZEdB ZFi fd3edeGfdCZHdi fd3ed(e.dDede8fdEZIi fd3ed(e.dFedGedeJf
dHZKdVdIZLd.e1de1fdJZMdK ZNdLdMi ddfdNZOdOePdPedQedRedSedTefdUZQ xZRS )Wbitstampreturnc                 N   | j                  t        t        |          i ddddddgddd	d
d| j                  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d'dd(dd)dd*dd+dd,dd-dd.dd/dd0dd1dd2di d3dd4d5d6dd7dd8dd9dd:dd;dd<dd=dd>dd?dd@ddAddBddCddDdi dEddFddGddHddIddJddKddLddMddNddOddPddQddRddSddTddUdi dVddWddXddYddZdd[dd\dd]dd^dd_dd`ddaddbddcdddddeddfdi dgddhddiddjddkd5dlddmddnddoddpddqddrddsddtdduddvddwdxdydydzd{dyd|d}d~ddddddddddddddddddddddddddddd
idddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi ddddddddddddddddddddddddddddddddddi dddddddddddddddd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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i d<dd=dd>dd?dd@ddAddBddCddDddEddFddGddHddIddJddKddLdi dMddNddOddPddQddRddSddTddUddVddWddXddYddZdd[dd\dd]di d^dd_dd`ddaddbddcdddddeddfddgddhddiddjddkddlddmddndi doddpddqddrddsddtdduddvddwddxddyddzdd{dd|dd}dd~dddddddddzddd| j                  d      | j                  d      | j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      gg| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      g| j                  d      | j                  d      ggddddi dddddddddd	dddt        dddiddi 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ʜidt        t        t        t        t        t        t        t        t        t        t        t        t        t        t        d̜t        t        t         t        d͜dΜddddd dddd dddddМddddddddќd ddd dddԜddddd՜dd dddd֜d d dאdid؜	d d dٜd d dٜdڜi      S (  Nidr+   nameBitstamp	countriesGB	rateLimitK   versionv2	userAgentchromeproThasCORSspotmarginFswapfutureoption	addMarginborrowCrossMarginborrowIsolatedMarginborrowMargincancelAllOrderscancelOrdercloseAllPositionsclosePositioncreateOrder$createOrderWithTakeProfitAndStopLoss&createOrderWithTakeProfitAndStopLossWscreateReduceOnlyOrdercreateStopLimitOrdercreateStopMarketOrdercreateStopOrderfetchBalancefetchBorrowInterestfetchBorrowRatefetchBorrowRateHistoriesfetchBorrowRateHistoryfetchBorrowRatesfetchBorrowRatesPerSymbolfetchCrossBorrowRatefetchCrossBorrowRatesfetchCurrenciesfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchDepositsWithdrawalsfetchDepositWithdrawFeeemulatedfetchDepositWithdrawFeesfetchFundingHistoryfetchFundingIntervalfetchFundingIntervalsfetchFundingRatefetchFundingRateHistoryfetchFundingRatesfetchGreeksfetchIndexOHLCVfetchIsolatedBorrowRatefetchIsolatedBorrowRatesfetchIsolatedPositionsfetchLedgerfetchLeveragefetchLeveragesfetchLeverageTiersfetchLiquidationsfetchLongShortRatiofetchLongShortRatioHistoryfetchMarginAdjustmentHistoryfetchMarginModefetchMarginModesfetchMarketLeverageTiersfetchMarketsfetchMarkOHLCVfetchMarkPricesfetchMyLiquidationsfetchMySettlementHistoryfetchMyTrades
fetchOHLCVfetchOpenInterestfetchOpenInterestHistoryfetchOpenInterestsfetchOpenOrdersfetchOptionfetchOptionChain
fetchOrderfetchOrderBookfetchPositionfetchPositionHistoryfetchPositionModefetchPositionsfetchPositionsForSymbolfetchPositionsHistoryfetchPositionsRiskfetchPremiumIndexOHLCVfetchSettlementHistoryfetchTickerfetchTickersfetchTradesfetchTradingFeefetchTradingFeesfetchTransactionFeesfetchTransactionsfetchVolatilityHistoryfetchWithdrawalsreduceMarginrepayCrossMarginrepayIsolatedMarginsetLeverage	setMarginsetMarginModesetPositionModetransferwithdrawurlszOhttps://github.com/user-attachments/assets/d5480572-1fee-43cb-b900-d38c522d0024zhttps://www.bitstamp.net/api)publicprivatezhttps://www.bitstamp.net)logoapiwwwdoc
timeframes6018030090018003600720014400216004320086400259200)1m3m5m15m30m1h2h4h6h12h1d1wrequiredCredentials)apiKeysecretr   get   )
zohlc/{pair}/zorder_book/{pair}/zticker/zticker_hour/{pair}/zticker/{pair}/ztransactions/{pair}/ztrading-pairs-info/zcurrencies/zeur_usd/ztravel_rule/vasps/)travel_rule/contacts/zcontacts/{contact_uuid}/zearn/subscriptions/zearn/transactions/zaccount_balances/zaccount_balances/{currency}/zbalance/zbalance/{pair}/zbch_withdrawal/zbch_address/zuser_transactions/zuser_transactions/{pair}/zcrypto-transactions/
open_orderzopen_orders/all/zopen_orders/{pair}/zorder_status/zcancel_order/zcancel_all_orders/zcancel_all_orders/{pair}/zbuy/{pair}/zbuy/market/{pair}/zbuy/instant/{pair}/zsell/{pair}/zsell/market/{pair}/zsell/instant/{pair}/ztransfer-to-main/ztransfer-from-main/zmy_trading_pairs/zfees/trading/zfees/trading/{market_symbol}zfees/withdrawal/zfees/withdrawal/{currency}/zwithdrawal-requests/zwithdrawal/open/zwithdrawal/status/zwithdrawal/cancel/zliquidation_address/new/zliquidation_address/info/zbtc_unconfirmed/zwebsockets_token/zbtc_withdrawal/zbtc_address/zripple_withdrawal/zripple_address/zltc_withdrawal/zltc_address/zeth_withdrawal/zeth_address/zxrp_withdrawal/zxrp_address/zxlm_withdrawal/zxlm_address/zpax_withdrawal/zpax_address/zlink_withdrawal/zlink_address/zusdc_withdrawal/zusdc_address/zomg_withdrawal/zomg_address/zdai_withdrawal/zdai_address/zknc_withdrawal/zknc_address/zmkr_withdrawal/zmkr_address/zzrx_withdrawal/zzrx_address/zgusd_withdrawal/zgusd_address/zaave_withdrawal/zaave_address/zbat_withdrawal/zbat_address/zuma_withdrawal/zuma_address/zsnx_withdrawal/zsnx_address/zuni_withdrawal/zuni_address/zyfi_withdrawal/zyfi_address/zaudio_withdrawal/zaudio_address/zcrv_withdrawal/zcrv_address/zalgo_withdrawal/zalgo_address/zcomp_withdrawal/zcomp_address/zgrt_withdrawal/zgrt_address/zusdt_withdrawal/zusdt_address/zeurt_withdrawal/zeurt_address/zmatic_withdrawal/zmatic_address/zsushi_withdrawal/zsushi_address/zchz_withdrawal/zchz_address/zenj_withdrawal/zenj_address/zalpha_withdrawal/zalpha_address/zftt_withdrawal/zftt_address/zstorj_withdrawal/zstorj_address/zaxs_withdrawal/zaxs_address/zsand_withdrawal/zsand_address/zhbar_withdrawal/zhbar_address/zrgt_withdrawal/zrgt_address/zfet_withdrawal/zfet_address/zskl_withdrawal/zskl_address/zcel_withdrawal/zcel_address/zsxp_withdrawal/zsxp_address/zada_withdrawal/zada_address/zslp_withdrawal/zslp_address/zftm_withdrawal/zftm_address/zperp_withdrawal/zperp_address/zdydx_withdrawal/zdydx_address/zgala_withdrawal/zgala_address/zshib_withdrawal/zshib_address/zamp_withdrawal/zamp_address/zsgb_withdrawal/zsgb_address/zavax_withdrawal/zavax_address/zwbtc_withdrawal/zwbtc_address/zctsi_withdrawal/zctsi_address/zcvx_withdrawal/zcvx_address/zimx_withdrawal/zimx_address/znexo_withdrawal/znexo_address/zust_withdrawal/zust_address/zant_withdrawal/zant_address/zgods_withdrawal/zgods_address/zrad_withdrawal/zrad_address/zband_withdrawal/zband_address/zinj_withdrawal/zinj_address/zrly_withdrawal/zrly_address/zrndr_withdrawal/zrndr_address/zvega_withdrawal/zvega_address/z1inch_withdrawal/z1inch_address/zens_withdrawal/zens_address/zmana_withdrawal/zmana_address/zlrc_withdrawal/zlrc_address/zape_withdrawal/zape_address/zmpl_withdrawal/zmpl_address/zeuroc_withdrawal/zeuroc_address/zsol_withdrawal/zsol_address/zdot_withdrawal/zdot_address/znear_withdrawal/znear_address/zdoge_withdrawal/zdoge_address/zflr_withdrawal/zflr_address/zdgld_withdrawal/zdgld_address/zldo_withdrawal/zldo_address/r   zearn/subscribe/zearn/subscriptions/setting/zearn/unsubscribezwecan_withdrawal/zwecan_address/ztrac_withdrawal/ztrac_address/zeurcv_withdrawal/zeurcv_address/zpyusd_withdrawal/zpyusd_address/zlmwr_withdrawal/zlmwr_address/zpepe_withdrawal/zpepe_address/zblur_withdrawal/zblur_address/zvext_withdrawal/zvext_address/zcspr_withdrawal/zcspr_address/zvchf_withdrawal/zvchf_address/zveur_withdrawal/zveur_address/ztruf_withdrawal/ztruf_address/zwif_withdrawal/zwif_address/zsmt_withdrawal/zsmt_address/zsui_withdrawal/zsui_address/zjup_withdrawal/zjup_address/zondo_withdrawal/zondo_address/zboba_withdrawal/)zboba_address/zpyth_withdrawal/zpyth_address/)r   postfeesz0.004010000z0.003100000z0.002500000z0.00181500000z0.00165000000z0.001220000000z0.00150000000z0.0008	100000000z0.0006	250000000z0.0005
1000000000z0.0003z0.0001)takermaker)	tierBased
percentager   r   tiersr   g      @)	BTCBCHLTCETHXRPXLMPAXUSDEUR)r   r   r   deposit)tradingfundingprecisionModecommonCurrenciesUSTUSTCoptionsnetworksByIdzbitcoin-cashr   bitcoinr   ethereumERC20litecoinr   stellarr   xrplr   tronTRC20algorandALGOflareFLRhederaHBARcardanaADAsongbirdzavalanche-c-chainAVAXsolanaSOLpolkadotDOTnearNEARdogeDOGESUICSRP)suicasper
exceptions)zNo permission foundzAPI key not foundzIP address not allowedzInvalid noncezInvalid signaturezAuthentication failedz+Missing key, signature and nonce parameterszWrong API key formatzYour account is frozenzIPlease update your profile with your FATCA information, before using API.zOrder not found.z*Price is more than 20% below market price.z@Bitstamp.net is under scheduled maintenance. We'll be back soon.zOrder could not be placed.zInvalid offset.)zMinimum order size isz'Check your account balance for details.zEnsure self value has at leastz"Ensure that there are no more than)exactbroadfeatures)IOCFOKPOGTD)
marginModetriggerPricetriggerPriceTypetriggerDirectionstopLossPricetakeProfitPriceattachedStopLossTakeProfittimeInForcehedgedtrailingleveragemarketBuyByCostmarketBuyRequiresPriceselfTradePreventioniceberg     )r  limitdaysBack	untilDayssymbolRequired)r  triggerr  r&  )r  r#  r'  r  r&  r#  )	sandboxrI   createOrdersr|   r   r   fetchOrdersfetchClosedOrdersr}   )linearinverse)r<   r>   r?   )deep_extendsuperr+   describe
userAgentsparse_numberr(   r   r   r'   r#   r"   r&   r%   r   r    r!   )self	__class__s    G/var/www/html/turnos/venv/lib/python3.12/site-packages/ccxt/bitstamp.pyr0  zbitstamp.describe   s<   h > @ }C
*}C
J}C
 $}C

 }C
 t}C
 2}C
 4}C
  fff %f 	f
 %f %f Uf $Uf 'f f "4f tf $Uf  f tf  7!f" 9%#f$ (%f& ''f( ()f* "5+f, -f. &u/f0 "51f2 +E3f4 )%5f6 #E7f8 ,U9f: ';f< (=f> "4?f@ &tAfB (CfD 1%EfF +DGfH *:IfJ +DKfL &uMfN 'OfP (QfR #ESfT *5UfV $UWfX uYfZ "5[f\ *5]f^ +E_f` )%afb tcfd  eff !%gfh %eifj $Ukfl &umfn -eofp /qfr "5sft #Eufv +Ewfx yfz !%{f| "5}f~ &uf@ +EAfB  CfD dEfF $UGfH +EIfJ %eKfL "4MfN uOfP #EQfR dSfT !$UfV  WfX 'YfZ $U[f\ !%]f^ *5_f` (afb %ecfd )%eff )%gfh tifj kfl tmfn "4ofp #Dqfr 'sft $Zufv )%wfx #Dyfz {f| #E}f~ &uf@ uAfB UCfD  EfF "5GfH DIfJ DKf}C
` i<= 25a}C
r s}C
N "$O}C
V ()./#$/0*+01/0'($%./  2345/0./	s+Qs6s #As *1	s
 *1s 's -as 4Qs /s %as +As .qs (s (s -as  4Q!s" &q#s$ -a%s& .q's( ')s* .q+s, /-s. ,Q/s0 .q1s2 ,Q3s4 (5s6 77s8 +A9s: 6q;s< /=s> +A?s@ -aAsB -aCsD 3AEsF 4QGsH +AIsJ ,QKsN *1OsP 'QsR -aSsT *1UsV *1WsX 'YsZ *1[s\ ']s^ *1_s` 'asb *1csd 'esf *1gsh 'isj +Aksl (msn +Aosp (qsr *1sst 'usv *1wsx 'ysz *1{s| '}s~ *1s@ 'AsB *1CsD 'EsF +AGsH (IsJ +AKsL (MsN *1OsP 'QsR *1SsT 'UsV *1WsX 'YsZ *1[s\ ']s^ *1_s` 'asb ,Qcsd )!esf *1gsh 'isj +Aksl (msn +Aosp (qsr *1sst 'usv +Awsx (ysz +A{s| (}s~ ,Qs@ )!AsB ,QCsD )!EsF *1GsH 'IsJ *1KsL 'MsN ,QOsP )!QsR *1SsT 'UsV ,QWsX )!YsZ *1[s\ ']s^ +A_s` (asb +Acsd (esf *1gsh 'isj *1ksl 'msn *1osp 'qsr *1sst 'usv *1wsx 'ysz *1{s| '}s~ *1s@ 'AsB *1CsD 'EsF +AGsH (IsJ +AKsL (MsN +AOsP (QsR +ASsT (UsV *1WsX 'YsZ *1[s\ ']s^ +A_s` (asb +Acsd (esf +Agsh (isj *1ksl 'msn *1osp 'qsr +Asst (usv *1wsx 'ysz *1{s| '}s~ +As@ (AsB *1CsD 'EsF +AGsH (IsJ *1KsL 'MsN *1OsP 'QsR +ASsT (UsV +AWsX (YsZ ,Q[s\ )!]s^ *1_s` 'asb +Acsd (esf *1gsh 'isj *1ksl 'msn *1osp 'qsr ,Qsst )!usv *1wsx 'ysz *1{s| '}s~ +As@ (AsB +ACsD (EsF *1GsH 'IsJ +AKsL (MsN *1OsP 'QsR 0SsT *1UsV 6qWsX +AYsZ ,Q[s\ )!]s^ +A_s` (asb ,Qcsd )!esf ,Qgsh )!isj +Aksl (msn +Aosp (qsr +Asst (usv +Awsx (ysz +A{s| (}s~ +As@ (AsB +ACsD (EsF +AGsH (IsJ *1KsL 'MsN *1OsP 'QsR *1SsT 'UsV *1WsX 'YsZ +A[s\ (]s^ +A_s` *+,-)*es{KW}C
n !%"&!..w7!..w7 "..s3T5F5Fw5OP!..w79J9J79ST!..x8$:K:KG:TU!..x8$:K:KH:UV!..y94;L;LX;VW!..y94;L;LX;VW!..z:D<M<Mg<VW!..z:D<M<Mh<WX!..{;T=N=Nx=XY!..{;T=N=Nx=XY!..|<d>O>OPX>YZ" "..s3T5F5Fw5OP!..w79J9J79ST!..x8$:K:KG:TU!..x8$:K:KH:UV!..y94;L;LX;VW!..y94;L;LX;VW!..z:D<M<Mg<VW!..z:D<M<Mh<WX!..{;T=N=Ns=ST!..{;T=N=Ns=ST!..|<d>O>OPS>TU"!F "'"' "       " 
 	G3o}C
V YW}C
X v!Y}C
`  !"E!u! ! 	!
 u! E! G! ! U! f! u! ! (! e! !  F!!" F#!$ !$'!a}C
N +;)<.>%1)<-@CV,?.>aq(5BNXe2F'1$ .:?P6D:F	%O}C
@ $&+(-,0,1).+06:#'#'"&#'	( #($)$)+027/4#()$, %)&+!%$(%'*/& ',#($)*/	# ',!%#($)*/( $()-#_2h ##
 ##q<A}C
 } }	    c                    | j                  |      }g }t        dt        |            D ]  }||   }| j                  |d      }|j	                  d      \  }}|j                         }	|j                         }
| j                  |      }| j                  |      }| j                  |d      }|j	                  d      }| j                  |d      }|j                  i d| j                  |d      d	|	d
z   |
z   d|dz   |z   d|d|ddd|	d|
ddddddddddddddd|dk(  ddddddddd| j                  | j                  | j                  |d                  | j                  | j                  | j                  |d                  d ddd!ddd!ddd!| j                  |d      dd!d"d|d#        |S )$a-  
        retrieves data on all markets for bitstamp

        https://www.bitstamp.net/api/#tag/Market-info/operation/GetTradingPairsInfo

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: an array of objects representing market data
        r   r/   /minimum_order r   r.   
url_symbolmarketId_symbolbasequotesettleNbaseIdquoteIdsettleIdtyper<   Tr=   Fr?   r>   r@   activeEnabledcontractbase_decimalscounter_decimals)amountpriceminmax)r  rK  rL  cost)r,  r-  contractSizeexpiryexpiryDatetimestrike
optionType	precisionlimitscreatedinfo)fetch_markets_from_cacherangelensafe_stringsplitlowersafe_currency_codeappendr2  parse_precisionsafe_number)r3  paramsresponseresultimarketr/   r?  r@  rB  rC  minimumOrderpartsstatuss                 r5  fetch_marketszbitstamp.fetch_markets]  s    008 q#h-( <	Aa[F##FF3D**S/KD%ZZ\FkkmG**40D++E2E++FODL &&s+E%%fi8FMM 1d&&v|<1FSL721 $*u,1 	1
 1 $1 &1 71 D1 1 1 %1 %1 1 %1  6Y.!1" E#1$  $"&""//0D0DTEUEUV\^mEn0op!..t/C/CDDTDTU[]oDp/qr  $#!
  $#
  $#
  $//q9#$  a1 1<	z r6  c                    d}| j                         }| j                  |      rd}| j                  | j                  | j	                  |                  }	|||||dd d | j                  |d   d   d   |      |	|	d d|	d d|d dd d ddi d	S )
NcryptofiatTr   r   r   rM  )rK  rL  rP  r   )r.   coderY  rE  r/   rF  r   r   feerV  rW  networks)r0  is_fiatr2  rb  number_to_stringrc  )
r3  r.   rp  r/   rV  minCostoriginalPayloadcurrencyTypedescriptiontickSizes
             r5  construct_currency_objectz"bitstamp.construct_currency_object  s    mmo<<!L$$T%9%9$:O:OPY:Z%[\# ##K$7	$B:$NPTU! $
 $
 #
  $ ;
 	
r6  c                 ^   | j                  | j                  di       }| j                  |d      }| j                  |dd      }| j                         }|||z
  |kD  r3| j	                  |      }| j                  |||d      | j                  d<   | j                  | j                  d   d      S )Nrw   	timestampexpiresr!  )re  r|  re  )
safe_valuer   safe_integermillisecondspublicGetTradingPairsInfoextend)r3  rd  r   r|  r}  nowre  s          r5  rZ  z!bitstamp.fetch_markets_from_cache  s     //$,,C%%g{;	##GY=!C)Ow#>55f=H+/;;w$ A ,DLL( t||N;ZHHr6  c           
         | j                  |      }i }t        dt        |            D ],  }||   }| j                  |d      }|j	                  d      \  }}|j                         }	|j                         }
| j                  |      }| j                  |      }| j                  |d      }|j	                  d      \  }}| j                  |d      }|j	                  d      }|d   }||vr+| j                  |d      }| j                  |	|||d	|      ||<   ||vs| j                  |d
      }| j                  |
|||| j                  |      |      ||<   / |S )a+  
        fetches all available currencies on an exchange

        https://www.bitstamp.net/api/#tag/Market-info/operation/GetTradingPairsInfo

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: an associative dictionary of currencies
        r   r/   r8  rx  z / r9  r:  rI  NrJ  )
rZ  r[  r\  r]  r^  r_  r`  r  rz  r2  )r3  rd  re  rf  rg  rh  r/   r?  r@  rB  rC  rx  baseDescriptionquoteDescriptionri  rj  rP  baseDecimalscounterDecimalss                      r5  fetch_currencieszbitstamp.fetch_currencies  s    008 q#h-( 	SAa[F##FF3D**S/KD%ZZ\FkkmG**40D++E2E**6=AK0;0A0A%0H-O-++FODL &&s+E8DFN#00I#==fdO]ikoqwxtVO"&"3"3F<N"O $ > >wO_aprv  sD  sD  EI  sJ  LR  !Su%	S& r6  Nr>  r#  c                    | j                          | j                  |      }d|d   i}| j                  | j                  ||            }| j	                  |d      }| j                  |dz        }| j                  ||d   |      }	||	d<   |	S )aA  
        fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://www.bitstamp.net/api/#tag/Order-book/operation/GetOrderBook

        :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
        pairr.   microtimestampr!  r>  nonce)load_marketsrh  publicGetOrderBookPairr  r  parse_to_intparse_order_book)
r3  r>  r#  rd  rh  requestre  r  r|  	orderbooks
             r5  fetch_order_bookzbitstamp.fetch_order_book  s     	V$F4L
 ..t{{7F/KL" **85EF%%nt&;<	))(F84DiP	+	'r6  tickerrh  c                 \   | j                  |d      }| j                  ||d       }| j                  |d      }| j                  |d      }| j                  |d      }t        j                  ||      }| j                  |d      }	| j                  i d|d|d| j                  |      d| j                  |d      d	| j                  |d	      d
| j                  |d
      dd d| j                  |d      dd d|d| j                  |d      d|	d|	dd dd dd dd |||d|      S )Nr  r|  vwapvolumelastr>  datetimehighlowbid	bidVolumeask	askVolumeopenclosepreviousClosechanger   average)
baseVolumequoteVolumerY  )r]  safe_symbolsafe_timestampr)   
string_mulsafe_tickeriso8601)
r3  r  rh  r<  r>  r|  r  r  r  r  s
             r5  parse_tickerzbitstamp.parse_ticker?  s   " ##FF3!!(FD9''<	/%%fh7
((T:/ !
f!
!
 Y/!
 D$$VV4	!

 4##FE2!
 4##FE2!
 !
 4##FE2!
 !
 D!
 D$$VV4!
 T!
 D!
 T!
 d!
  $!!
" t#!
$ %&)!
* + 	r6  c                     | j                          | j                  |      }d|d   i}| j                  | j                  ||            }| j	                  ||      S )a  
        fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        https://www.bitstamp.net/api/#tag/Tickers/operation/GetMarketTicker

        :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>`
        r  r.   )r  rh  publicGetTickerPairr  r  )r3  r>  rd  rh  r  r  s         r5  fetch_tickerzbitstamp.fetch_tickern  s`     	V$F4L
 ))$++gv*FG    00r6  symbolsc                 h    | j                          | j                  |      }| j                  ||      S )a&  
        fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market

        https://www.bitstamp.net/api/#tag/Tickers/operation/GetCurrencyPairTickers

        :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>`
        )r  publicGetTickerparse_tickers)r3  r  rd  re  s       r5  fetch_tickerszbitstamp.fetch_tickers  s5     	''/" !!(G44r6  c                 .   | j                  |d      }||S | j                  |g d      }t        |j                               }t	        dt        |            D ]:  }||   }|j                  d      dk  s| j                  ||      }|2|dk7  s8|c S  y )Ncurrency)rq  rL  r  rE  rk  r.   r   r=  )safe_string_loweromitlistkeysr[  r\  findr  )r3  transaction
currencyIdidsrg  r.   values          r5   get_currency_id_from_transactionz)bitstamp.get_currency_id_from_transaction  s     ++KD
!ii .
  ;##%&q#c(# 	AQBwws|a))+r:%EQJI	 r6  c                    | j                  |g d      }t        |j                               }t        |      }|dkD  r?t	        | j
                  dz   | j                  |      z   dz   | j                  |      z         |dk(  rT|d   |d   z   }|| j                  v r| j                  |      S |d   |d   z   }|| j                  v r| j                  |      S y )N)rq  rL  r  tidrE  order_idside   z% getMarketFromTrade() too many keys: z in the trade: r   r   )	r  r  r  r\  r   r.   jsonmarkets_by_idsafe_market)r3  tradecurrencyIdsnumCurrencyIdsr<  s        r5  get_market_from_tradezbitstamp.get_market_from_trade  s   		% "
  5::<([)A*Q QTXT]T]^iTj jm~ ~  BF  BK  BK  LQ  BR  !R  S  SQ"1~A6H4---''11"1~A6H4---''11r6  r  c                 |   | j                  |dd      }d }d }| j                  |d      }| j                  |d      }| j                  |d      }d }	| j                  |d      }
d }|ht        |j                               }t	        dt        |            D ]7  }||   }|dk7  s|j                  d      dk\  s#|}| j                  ||d      }9 || j                  |      }| j                  |d	      }|d
   }||n|d   }| j                  |||      }| j                  ||d   |      }| j                  ||d   |
      }
|d   }| j                  |dd      }d }|6|j                  d      dk\  r| j                  |      }nt        |      }|dz  }d|v r5|Wt        j                  |d      }|rd}t        j                  |      }n'd}n$| j                  |d      }|dk(  rd}n
|dk(  rd}nd }|
t        j                  |
      }
d }|||d}| j                  |||| j!                  |      |||	|d |||
|d|      S )Nr.   r  rL  rK  r  rP  r   r=  rq  r@  r<  rB  rC  r>  dater  r:  r!  r   sellbuyrE  1)rP  r  )r.   rY  r|  r  r>  orderrE  r  takerOrMakerrL  rK  rP  rq  )safe_string_2r]  r  r  r[  r\  r  r  r  	parse8601intr)   	string_lt
string_neg
string_abs
safe_trader  )r3  r  rh  r.   r>  r  priceStringamountStringorderIdrE  
costStringrawMarketIdr  rg  
currentKeyfeeCostStringfeeCurrencypriceIddatetimeStringr|  isAmountNegrq  s                         r5  parse_tradezbitstamp.parse_trade  s   P tU3&&ug6''x8""5*5%%eV4
>

%D1c$i( H!!W
+
0D0I",K!--k63GF	H >//6F((6Wo"-"9+z@R&&ug{C''vh/?N%%eVI->
K
!++E6:F	%""3'1, NN>:	  /	%,	5='%//cB!D#*#5#5l#CL D##E62Ds{! ++J7J$%'C "Y/  " 
  	r6  sincec                     | j                          | j                  |      }|d   dd}| j                  | j                  ||            }| j	                  ||||      S )a7  
        get the list of most recent trades for a particular symbol

        https://www.bitstamp.net/api/#tag/Transactions-public/operation/GetTransactions

        :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.   hour)r  time)r  rh  publicGetTransactionsPairr  parse_trades)r3  r>  r  r#  rd  rh  r  re  s           r5  fetch_tradeszbitstamp.fetch_trades\  se     	V$4L
 11$++gv2NO&   65%@@r6  c           	          | j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  |d      | j                  |d      gS )Nr|  r  r  r  r  r  )r  rc  )r3  ohlcvrh  s      r5  parse_ohlcvzbitstamp.parse_ohlcv  sn     {3UF+UF+UE*UG,UH-
 	
r6  r   c                 z   | j                          | j                  |      }|d   | j                  | j                  ||      d}| j	                  |      }|D|d|d<   nd}| j                  |dz        }	|	|d<   | j                  |	||dz
  z        |d<   ||d<   nE|4| j                  |dz        }	|	|d<   | j                  |	||dz
  z        |d<   t        |d      |d<   | j                  | j                  ||            }
| j                  |
di       }| j                  |d	g       }| j                  |||||      S )
a  
        fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        https://www.bitstamp.net/api/#tag/Market-info/operation/GetOHLCData

        :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
        r.   )r  stepr!  r#  startr   enddataohlc)r  rh  r]  r   parse_timeframer  sumrN  publicGetOhlcPairr  r~  	safe_listparse_ohlcvs)r3  r>  	timeframer  r#  rd  rh  r  durationr  re  r  r  s                r5  fetch_ohlcvzbitstamp.fetch_ohlcv  s^    	V$4L$$T__iK
 ''	2=}#' ))%$,7#( !%%UQY1G!H#(  ))%$,7#( !%%UQY1G!H"5$/GG))$++gv*FG x4~~dFB/  vy%GGr6  c                 d   |d d d}|g }t        dt        |            D ]~  }||   }| j                  |d      }| j                  |      }| j	                         }| j                  |d      |d<   | j                  |d      |d<   | j                  |d      |d<   |||<    | j                  |      S )	N)rY  r|  r  r   r  	availablefreereservedusedtotal)r[  r\  r]  r`  accountsafe_balance)r3  re  rf  rg  currencyBalancer  currencyCoder  s           r5  parse_balancezbitstamp.parse_balance  s    

 Hq#h-( 	+A&qkO))/:FJ22:>LllnG"..LGFO"..
KGFO#//IGG#*F< 	+   ((r6  c                 f    | j                          | j                  |      }| j                  |      S )a{  
        query for balance and get the amount of funds available for trading or funds locked in orders

        https://www.bitstamp.net/api/#tag/Account-balances/operation/GetAccountBalances

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
        )r  privatePostAccountBalancesr
  r3  rd  re  s      r5  fetch_balancezbitstamp.fetch_balance  s3     	226: !!(++r6  c                    | j                          | j                  |      }d|d   i}| j                  | j                  ||            }| j	                  |d      }| j                  ||d         }| j                  ||      S )ae  
        fetch the trading fees for a market

        https://www.bitstamp.net/api/#tag/Fees/operation/GetTradingFeesForCurrency

        :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>`
        market_symbolr.   currency_pair)r  rh  privatePostFeesTradingr  index_by	safe_dictparse_trading_fee)r3  r>  rd  rh  r  re  tradingFeesByMarketId
tradingFees           r5  fetch_trading_feezbitstamp.fetch_trading_fee  s     	V$VD\
 ..t{{7F/KL !%h H^^$96$<H
%%j&99r6  rq  c                     | j                  |d      }| j                  |di       }|| j                  ||      | j                  |d      | j                  |d      d d dS )Nrh  r   r   r   )rY  r>  r   r   r   r   )r]  r  r  rc  )r3  rq  rh  r<  r   s        r5  r  zbitstamp.parse_trading_fee  si    ##C2~~c62.&&x8%%dG4%%dG4
 	
r6  c                 ~    d|i}t        dt        |            D ]   }| j                  ||         }|d   }|||<   " |S )NrY  r   r>  )r[  r\  r  )r3  r   rf  rg  rq  r>  s         r5  parse_trading_feeszbitstamp.parse_trading_fees$  sR    ~q#d)$ 	!A((a1C]F F6N	! r6  c                 f    | j                          | j                  |      }| j                  |      S )a]  
        fetch the trading fees for multiple markets

        https://www.bitstamp.net/api/#tag/Fees/operation/GetAllTradingFees

        :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  s      r5  fetch_trading_feeszbitstamp.fetch_trading_fees,  s3     	..v6 &&x00r6  codesc                 f    | j                          | j                  |      }| j                  |      S )ap  
 @deprecated
        please use fetchDepositWithdrawFees instead

        https://www.bitstamp.net/api/#tag/Fees

        :param str[]|None codes: list 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>`
        )r  privatePostFeesWithdrawalparse_transaction_fees)r3  r  rd  re  s       r5  fetch_transaction_feeszbitstamp.fetch_transaction_feesG  s3     	11&9 **844r6  c                 b   i }| j                  |d      }t        |j                               }t        dt	        |            D ]i  }||   }| j                  ||i       }| j                  |      }	|| j                  |	|      sA| j                  |d      i | j                  ||      d||	<   k |S )Nr  r   rq  )withdraw_feer   rY  )
r  r  r  r[  r\  r~  r`  in_arrayrc  r  )
r3  re  r  rf  
currenciesr  rg  r.   r   rp  s
             r5  r!  zbitstamp.parse_transaction_fees`  s    ]]8Z8
:??$%q#c(# 
	AQB??8Q3D**2.D!4==u+E $ 0 0u =z26F4L
	 r6  c                     | j                          | j                  |      }| j                  |d      }| j                  ||      S )av  
        fetch deposit and withdraw fees

        https://www.bitstamp.net/api/#tag/Fees/operation/GetAllWithdrawalFees

        :param str[]|None codes: list 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>`
        r  )r  r   group_byparse_deposit_withdraw_fees)r3  r  rd  re  responseByCurrencyIds        r5  fetch_deposit_withdraw_feesz$bitstamp.fetch_deposit_withdraw_feesq  sG     	11&9  $}}XzB//0DeLLr6  c                    | j                  |      }t        dt        |            D ]U  }||   }| j                  |d      }| j	                  |      }| j                  |d      }|d d|d<   |d dd d dd|d   |<   W |S )Nr   networkrq  )rq  r   r   )r   r   rr  )deposit_withdraw_feer[  r\  r]  network_id_to_coderc  )	r3  rq  r  rf  jnetworkEntry	networkIdnetworkCodewithdrawFees	            r5  parse_deposit_withdraw_feez#bitstamp.parse_deposit_withdraw_fee  s    **3/q#c(# 	Aq6L((yAI11)<K**<?K"""F: '"&
  "&	/F:{+	& r6  rE  r  rK  rL  c                    | j                          | j                  |      }|d   | j                  ||      d}| j                  |dd      }	|	|	|d<   | j	                  |dg      }d}
| j                  |      }|dk(  rI|dk(  r"| j                  | j                  ||            }
n| j                  | j                  ||            }
n|dk(  rI|dk(  r"| j                  | j                  ||            }
n| j                  | j                  ||            }
n]| j                  ||      |d	<   |dk(  r"| j                  | j                  ||            }
n!| j                  | j                  ||            }
| j                  |
|      }||d
<   |S )a8  
        create a trade order

        https://www.bitstamp.net/api/#tag/Orders/operation/OpenInstantBuyOrder
        https://www.bitstamp.net/api/#tag/Orders/operation/OpenMarketBuyOrder
        https://www.bitstamp.net/api/#tag/Orders/operation/OpenLimitBuyOrder
        https://www.bitstamp.net/api/#tag/Orders/operation/OpenInstantSellOrder
        https://www.bitstamp.net/api/#tag/Orders/operation/OpenMarketSellOrder
        https://www.bitstamp.net/api/#tag/Orders/operation/OpenLimitSellOrder

        :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>`
        r.   )r  rK  client_order_idclientOrderIdNrh  BuyinstantrL  rE  )r  rh  amount_to_precisionr  r  
capitalizeprivatePostBuyMarketPairr  privatePostSellMarketPairprivatePostBuyInstantPairprivatePostSellInstantPairprice_to_precisionprivatePostBuyPairprivatePostSellPairparse_order)r3  r>  rE  r  rK  rL  rd  rh  r  r8  re  capitalizedSider  s                r5  create_orderzbitstamp.create_order  s   & 	V$4L..vv>
 **63DoV$)6G%&YYv'89F//$/8%'88Wf9UV99$++gv:VWY%'99$++gv:VW::4;;wPV;WX#66vuEGG%'224;;w3OP33DKK4PQ  62fr6  r.   c                     | j                          d|i}| j                  | j                  ||            }| j                  |      S )a  
        cancels an open order

        https://www.bitstamp.net/api/#tag/Orders/operation/CancelOrder

        :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.   )r  privatePostCancelOrderr  rD  )r3  r.   r>  rd  r  re  s         r5  cancel_orderzbitstamp.cancel_order  sL     	"
 ..t{{7F/KL ))r6  c                 0   | j                          d}i }d}|;| j                  |      }|d   |d<   | j                  | j                  ||            }n!| j	                  | j                  ||            }| j                  |d      }| j                  |      S )a   
        cancel all open orders

        https://www.bitstamp.net/api/#tag/Orders/operation/CancelAllOrders
        https://www.bitstamp.net/api/#tag/Orders/operation/CancelOrdersForMarket

        :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
        :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>`
        Nr.   r  canceled)r  rh  privatePostCancelAllOrdersPairr  privatePostCancelAllOrdersr  parse_orders)r3  r>  rd  rh  r  re  rK  s          r5  cancel_all_orderszbitstamp.cancel_all_orders  s     	[[(F$TlGFO::4;;wPV;WXH66t{{7F7STH  >>(J7  **r6  rk  c                 6    ddddd}| j                  |||      S )Nr  closedrK  )zIn QueueOpenFinishedCanceledr]  r3  rk  statusess      r5  parse_order_statuszbitstamp.parse_order_status  s,     "	
 &&99r6  c                    | j                          | j                  |dd      }i }|||d<   | j                  |ddg      }n||d<   | j                  | j	                  ||            }| j                  | j                  |d            S )Nr7  r8  r.   rk  )r  safe_value_2r  privatePostOrderStatusr  rX  r]  )r3  r.   r>  rd  r8  r  re  s          r5  fetch_order_statuszbitstamp.fetch_order_status  s    ))&2C_U$)6G%&YYv(9?'KLFGDM..t{{7F/KL&&t'7'7('KLLr6  c                    | j                          d}|| j                  |      }| j                  |dd      }i }|||d<   | j                  |ddg      }n||d<   | j	                  | j                  ||            }| j                  ||      S )a  
        fetches information on an order made by the user

        https://www.bitstamp.net/api/#tag/Orders/operation/GetOrderStatus

        :param str id: the 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>`
        Nr7  r8  r.   )r  rh  rZ  r  r[  r  rD  )r3  r.   r>  rd  rh  r8  r  re  s           r5  fetch_orderzbitstamp.fetch_order+  s     	[[(F))&2C_U$)6G%&YYv(9?'KLFGDM..t{{7F/KL& &11r6  c                    | j                          i }d}d}|| j                  |      }|d   |d<   |dz  }|||d<    t        | |      | j                  ||            }| j	                  |dd      }	| j                  |	|||      S )	a{  
        fetch all trades made by the user

        https://www.bitstamp.net/api/#tag/Transactions-private/operation/GetUserTransactions
        https://www.bitstamp.net/api/#tag/Transactions-private/operation/GetUserTransactionsForMarket

        :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 trades 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>`
        privatePostUserTransactionsNr.   r  Pairr#  rE  2)r  rh  getattrr  	filter_byr  )
r3  r>  r  r#  rd  r  methodrh  re  rf  s
             r5  fetch_my_tradeszbitstamp.fetch_my_tradesV  s     	.[[(F$TlGFOfF$GG(74(Wf)EF&#6  >>r6  rp  c                     | j                          i }|||d<   | j                  | j                  ||            }d}|| j                  |      }| j	                  |dddgd      }| j                  ||||      S )a  
        fetch history of deposits and withdrawals

        https://www.bitstamp.net/api/#tag/Transactions-private/operation/GetUserTransactions

        :param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
        :param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
        :param int [limit]: max number of deposit/withdrawals to return, default is None
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
        Nr#  rE  r   r  F)r  r`  r  r  filter_by_arrayparse_transactions)	r3  rp  r  r#  rd  r  re  r  transactionss	            r5  fetch_deposits_withdrawalsz#bitstamp.fetch_deposits_withdrawalsq  s     	$GG33DKK4PQ6 }}T*H++HfsCj%P&&|XueLLr6  c                     | j                          i }|| j                         |z
  |d<   nd|d<   | j                  | j                  ||            }| j	                  |d||      S )a*  
        fetch all withdrawals made from an account

        https://www.bitstamp.net/api/#tag/Withdrawals/operation/GetWithdrawalRequests

        :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>`
        N	timedeltai)r  r  privatePostWithdrawalRequestsr  ri  )r3  rp  r  r#  rd  r  re  s          r5  fetch_withdrawalszbitstamp.fetch_withdrawals  sq     	#'#4#4#6#>GK #+GK 55dkk'66RS2 &&xueDDr6  r  r  c                    | j                  | j                  |d            }| j                  |      }| j                  ||      }| j                  |d      }d }d }d|v r| j                  |d      }n7|| j                  ||d   |      }|d   }n||| j                  |||      }|}|t	        j
                  |      }d}	d|v r!| j                  | j                  |d            }	d }
d|v r"| j                  |d      }|d	k(  rd
}
n
|dk(  rd}
nd}
d }| j                  |d      }|+|j                  d      }t        |      }|dkD  r
|d   }|d   }d d d d}|||d d}i d|d| j                  |d      d| j                  |d      d|
d|dd d| j                  |      d|	d|d| j                  |      d|dd d|d|dd d|dd d d |dS )Nr  rq  rK  r.   rp  okrk  rE  r   r   r  
withdrawaladdressz?dt=r   r   )r  rP  raterY  txidtransaction_idr  r-  r|  addressFrom	addressTotagtagFromtagToupdated)commentinternalrq  )r  r]  r  r`  r)   r  parse_transaction_statusr^  r\  r2  r  )r3  r  r  r|  r  rp  feeCostr  rK  rk  rE  rawTypery  rs  addressPartsnumPartsrq  s                    r5  parse_transactionzbitstamp.parse_transaction  s   P NN4#3#3K#LM	::;G
&&z8<"";6{"%%k8<F!%%k8D>6JF"6*KZ%;%%k:vFFK''/F{"2243C3CKQY3Z[F[ &&{F;G#~ C#  D"";	:"==0L<(H!|&q/"1o

 'C

K
$"";5
 D$$[2BC
 D	

 
 t
 d''/
 f
 
 Y/
 w
 4
 
 3
 t
  S!
" t#
$ )
 	
r6  c                 8    dddddd}| j                  |||      S )Npendingrq  rK  failed)r   r  rb  34rU  rV  s      r5  r  z!bitstamp.parse_transaction_statusA  s1     
 &&99r6  r  c                 v   | j                  |d      }| j                  |d      }| j                  |d      }|	|dk(  rdnd}| j                  | j                  |d            }| j                  |d      }| j                  ||d	      }| j	                  | j                  |d
            }	| j                  |d      }
| j                  |dg       }| j                  |d      }| j                  i d|d|d| j                  |      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.   r7  rE  r  r  r  r  r  r8  rk  rK  rj  rL  r8  r|  lastTradeTimestampr>  r  postOnlyr  r  rP  filled	remaining)tradesrq  rY  r  )r]  r  r  r  rX  r~  
safe_orderr  )r3  r  rh  r.   r8  r  r|  r<  r>  rk  rK  rj  rL  s                r5  rD  zbitstamp.parse_orderO  s   d eT*((0ABv."ck6DNN4#3#3E:#FG	))%A!!(FC8(()9)9%)JK!!%2unbA  0  
" 
] 
 Y/ 
 	 

 !$ 
 f 
 f 
 D 
 4 
  
 D 
 U 
 D 
 D 
 f 
  d! 
" # 
$ #+ 
, - 	r6  c                 6    ddddd}| j                  |||      S )Nr  r  r   )r   r  rb  14rU  )r3  rE  typess      r5  parse_ledger_entry_typez bitstamp.parse_ledger_entry_type  s,    	
 tT22r6  itemc                    | j                  | j                  |d            }|dk(  r| j                  |      }d }t        |j	                               }t        dt        |            D ]A  }||   j                  d      dk\  s||   j                  dd      }| j                  ||      }C || j                  |      }|d   dk(  rdnd	}	| j                  ||d
   |d   |d   |	d |d   d ||d   |d   d d d|d   d|      S | j                  ||      }
d }	d|v r-| j                  |d      }t        j                  |d      rdnd	}	n[d|
v rW|
d   R| j                  |
d      }| j                  |      }| j                  ||d
         }t        j                  |d      rdnd	}	| j                  ||
d
   |
d   |
d   |	d |
d   d ||
d   |
d   d d |
d   |
d   d|      S )NrE  r  r   r=   r  r  inoutr.   r|  r  r  r?  rK  rq  rq  )rY  r.   r|  r  	directionr  referenceIdreferenceAccountrE  r  rK  beforeafterrk  rq  r   r  ru  rk  )r  r]  r  r  r  r[  r\  r  replacer  r  safe_ledger_entryr  r)   	string_gtr  )r3  r  r  rE  parsedTraderh  r  rg  r<  r  parsedTransactionrK  r	  s                r5  parse_ledger_entryzbitstamp.parse_ledger_entry  sW   6 ++D,<,<T6,JK7?**40KF		$D1c$i( @7<<$)#AwsB7H!--h?F@ ~33D9!,V!4!=EI))!$'(5'
3&*73$("6N%h/"5)+  ! $ !% 6 6tX FI4))$9$+$5$5fc$BD	 117H7T7`#//0A:N==6))$?$+$5$5fc$BD	))'-.{;-j9&08$(-j9+H5+H5(/+  ! r6  c                     | j                          i }|||d<   | j                  | j                  ||            }d}|| j                  |      }| j	                  ||||      S )ap  
        fetch the history of changes, actions done by the user or operations that altered the balance of the user

        https://www.bitstamp.net/api/#tag/Transactions-private/operation/GetUserTransactions

        :param str [code]: unified currency code, default is None
        :param int [since]: timestamp in ms of the earliest ledger entry, default is None
        :param int [limit]: max number of ledger entries to return, default is None
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
        Nr#  )r  r`  r  r  parse_ledger)r3  rp  r  r#  rd  r  re  r  s           r5  fetch_ledgerzbitstamp.fetch_ledger  sp     	$GG33DKK4PQ}}T*H  8UEBBr6  c           	          d}| j                          || j                  |      }| j                  |      }| j                  ||||ddd      S )ah  
        fetch all unfilled currently open orders

        https://www.bitstamp.net/api/#tag/Orders/operation/GetAllOpenOrders
        https://www.bitstamp.net/api/#tag/Orders/operation/GetOpenOrdersForMarket

        :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 orders 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>`
        Nr  r#  )rk  rE  )r  rh  privatePostOpenOrdersAllrN  )r3  r>  r  r#  rd  rh  re  s          r5  fetch_open_orderszbitstamp.fetch_open_orders  sb     [[(F008   65%B
  	r6  c                 "    |j                         S )zq
 @ignore
        :param str code: Unified currency code
        :returns str: lowercase version of code
        )r_  r3  rp  s     r5  get_currency_namezbitstamp.get_currency_name@  s     zz|r6  c                 (    |dk(  xs |dk(  xs |dk(  S )Nr   r   GBP r  s     r5  rs  zbitstamp.is_fiatH  s    u}>>>r6  c                 P   | j                  |      rt        | j                  dz   |z   dz         | j                  |      }d| j	                  |      z   dz   } t        | |      |      }| j                  |d      }| j                  |dd      }| j                  |       ||d||d	S )
a  
        fetch the deposit address for a currency associated with self account

        https://www.bitstamp.net/api/#tag/Deposits/operation/GetCryptoDepositAddress

        :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>`
        z  fiat fetchDepositAddress() for z is not supported!privatePostAddressrs  memo_iddestination_tagN)rY  r  r-  rs  ry  )	rs  r$   r.   r  r<  rc  r]  r  check_address)r3  rp  rd  r/   re  re  rs  ry  s           r5  fetch_deposit_addresszbitstamp.fetch_deposit_addressK  s     <<tww)KKdRUiijj%%d+!66B(74(0""8Y7  96GH7#
 	
r6  rs  c                    | j                  ||      \  }}| j                          | j                  |       d|i}d}d}| j                  |      sL| j	                  |      }	d| j                  |	      z   dz   }|dk(  r|||d<   n|dk(  s|dk(  r|||d	<   ||d
<   n d}| j                  |      }||d<   |d   |d<    t        | |      | j                  ||            }
| j                  |
|      S )a?  
        make a withdrawal

        https://www.bitstamp.net/api/#tag/Withdrawals/operation/RequestFiatWithdrawal
        https://www.bitstamp.net/api/#tag/Withdrawals/operation/RequestCryptoWithdrawal

        :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>`
        rK  Nr  
Withdrawalr   r  r   r   r  rs  privatePostWithdrawalOpenibanr.   account_currency)
handle_withdraw_tag_and_paramsr  r  rs  r  r<  r  rc  r  r  )r3  rp  rK  rs  ry  rd  r  r  re  r/   re  s              r5  r   zbitstamp.withdrawe  s     99#vFV7#f
 ||D!))$/D"T__T%::\IFu}?14G-.$&.?),GI&!(GI0F}}T*H%GFO*24.G&'(74(Wf)EF%%h99r6  fromAccount	toAccountc                    | j                          | j                  |      }| j                  | j                  ||            |d   j	                         d}d}|dk(  r'||d<   | j                  | j                  ||            }nD|dk(  r'||d<   | j                  | j                  ||            }nt        | j                  dz         | j                  ||      }	||	d<   ||	d<   ||	d	<   |	S )
a  
        transfer currency internally between wallets on the same account

        https://www.bitstamp.net/api/#tag/Sub-account/operation/TransferFromMainToSub
        https://www.bitstamp.net/api/#tag/Sub-account/operation/TransferFromSubToMain

        :param str code: unified currency code
        :param float amount: amount to transfer
        :param str fromAccount: account to transfer from
        :param str toAccount: account to transfer to
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
        r.   )rK  r  Nmain
subAccountz) transfer() only supports from or to mainrK  r  r  )r  r  parse_to_numericcurrency_to_precisionupperprivatePostTransferFromMainr  privatePostTransferToMainr   r.   parse_transfer)
r3  rp  rK  r  r  rd  r  r  re  r   s
             r5  r   zbitstamp.transfer  s     	==&++D,F,FtV,TU ,,.
 & $-GL!77GV8TUH& $/GL!55dkk'66RSHTWW'RRSS &&x:#"- )r6  c                 b    | j                  |d      }|d d d |d   d d d | j                  |      d	S )Nrk  rp  )	rY  r.   r|  r  r  rK  r  r  rk  )r]  parse_transfer_status)r3  r   r  rk  s       r5  r  zbitstamp.parse_transfer  sK     !!(H5 (008

 
	
r6  c                 2    ddd}| j                  |||      S )Nrq  r  )rq  errorrU  rV  s      r5  r  zbitstamp.parse_transfer_status  s&    
 &&99r6  c                 "    | j                         S N)r  )r3  s    r5  r  zbitstamp.nonce  s      ""r6  r   GETc                    | j                   d   |   dz   }|| j                  dz   z  }|| j                  ||      z  }| j                  || j	                  |            }|dk(  r|r!|d| j                  |      z   z  }n| j                          d| j                  z   }	| j                         }
t        | j                               }d}d}|	|
||d}|d	k(  r5|r| j                  |      }d
}||d<   n| j                  ddi      }d
}||d<   |r|nd}|	|z   |j                  dd      z   |z   |
z   |z   |z   |z   }| j                  | j                  |      | j                  | j                        t        j                         }||d<   ||||dS )Nr   r8  r   ?z	BITSTAMP r6   r  )zX-AuthzX-Auth-NoncezX-Auth-TimestampzX-Auth-VersionPOSTz!application/x-www-form-urlencodedzContent-Typefoobarzhttps://zX-Auth-Signature)urlre  bodyheaders)r   r5   implode_paramsr  extract_params	urlencodecheck_required_credentialsr   uuidstrr  r  hmacencoder   hashlibsha256)r3  pathr   re  rd  r  r  r  queryxAuth
xAuthNoncexAuthTimestampxAuthVersioncontentTypeauthBodyauth	signatures                    r5  signzbitstamp.sign  s   iis#c)t||c!!t""400		&$"5"5d";<(?sT^^E222++-$++-EJ !2!2!45NLK *$2".	G >>%0D"EK.9GN+  >>5%.9D"EK.9GN+#tH6>CKK
B$??+MPZZ]kknzz  ~F  FD		$++d"3T[[5Mw~~^I*3G&'fdwOOr6  httpCodereasonr  re  r  r  c
                    |y | j                  |d      }
| j                  |d      }|
dk(  s|g }t        |t              r|j	                  |       n|~t        |j                               }t        dt        |            D ]M  }||   }| j                  ||      }t        |t
              r| j                  ||      }=|j	                  |       O | j                  |di       }t        |t              r|j	                  |       nA| j                  |dg       }t        dt        |            D ]  }|j	                  ||           | j                  |d      }|dk(  rt        | j                  dz         | j                  d	z   |z   }t        dt        |            D ]G  }||   }| j                  | j                  d
   ||       | j                  | j                  d   ||       I t        |      y )Nrk  r  r   r  __all__rp  API0005zL invalid signature, use the uid for the main account if you have subaccountsr:  r  r  )r]  r~  
isinstancer  ra  r  r  r[  r\  array_concatr   r.   throw_exactly_matched_exceptionr
  throw_broadly_matched_exceptionr   )r3  r  r  r  re  r  r  re  requestHeadersrequestBodyrk  r  errorsr  rg  keyr  reasonInnerallrp  feedbacks                        r5  handle_errorszbitstamp.handle_errors  s    !!(H5'2g5#4F%%e$"EJJL)q#d), -Aq'C OOE37E!%.!%!2!265!Ae,- //(HbAK+s+k*ook9bAq#c(+ *AMM#a&)*##Hf5Dy )$''  5C  +C  D  Dww}t+H1c&k* `q	44T__W5MuV^_44T__W5MuV^_`  ))r6  r  )S__name__
__module____qualname__r   r0  r   r   rl  rz  rZ  r   r  r  r
   r   r  dictr   r  r  r   r   r  r  r  r   r  r  r  r  r  r   r
  r  r   r  r  r  r   r  r"  r!  r+  r5  r   r   floatr   rF  r   rI  rO  rX  r\  r^  rf  r   rk  ro  r   r  r  r   rD  r  r   r  r  r  r  rs  r	   r  r   r   r   r  r  r  r  r  r  __classcell__)r4  s   @r5  r+   r+      s
   ~# ~@ $& V$v, Vp$
L /1 I ') ,Z ,\ :>b %s %3 %Y %N-4 - -6 -^ 02 13 1f 1B 04B 5W 57 5< D.t tv t tl 6:UW %A3 %As %A# %A\`af\g %AN
 
4 
( 26DW[df 2H# 2Hc 2HQT 2Hkoptku 2Hh) )& $& ,( ,0 57  :  :;N  :D

T 

6 

EX 

 )+ 1{ 16 7;2 5G 52" 15R M2. gksu 13 1i 1y 1RW 1`c 1f 37r *s *C *6 /32 %+ %+N: : 9=R 
MS 
M# 
M 26b )2c )23 )2V -1tRV_a ?c ? ?C ?6 6:[_hj /Ms /M# /MUX /Most  pA /Mb -1tRV_a +Ec +E +EC +Efjkvfw +EZp
T p
X p
Q\ p
d:s :U Uv U Un3Ut Ux U; Un (,$TZ\ C CC Cs Caefqar C, /3TXac " "3 "c "hlmrhs "H? 79 
# 
^ 
4 DHPR (:S (:% (:# (:Wb (:T [] $S $% $c $c $an $L
":C :C :# &eBSW &PP'c '3 'S '# 'X\ 'dg 'r6  r+   )0ccxt.base.exchanger   ccxt.abstract.bitstampr   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'   ccxt.base.decimal_to_precisionr(   ccxt.base.preciser)   r+   r  r6  r5  <module>r     sq    ( .  {  {  {  {  {  {  * 0 - ' . + ) * ) 1 * ) 4 %D$x D$r6  