
    E#iFJ                    X   S SK Jr  S SKJr  S SKrS SKrS SKJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJ r   S S
KJ!r!  S SKJ"r"  S SKJ#r#  S SKJ$r$  S SKJ%r%  S SKJ&r&  S SKJ'r'  S SKJ(r(  S SKJ)r)  S SK*J+r+  S SK,J-r-   " S S\\5      r.g)    )Exchange)ImplicitAPIN)AnyBalances
CurrenciesCurrencyDepositAddressIntMarketNumOrder	OrderBook	OrderSide	OrderTypeStrStringsTickerTickersTradeTradingFeesTransaction)List)ExchangeError)AuthenticationError)PermissionDenied)ArgumentsRequired)
BadRequest)InsufficientFunds)InvalidOrder)OrderNotFound)NotSupported)RateLimitExceeded)ExchangeNotAvailable)OnMaintenance)InvalidNonce)	TICK_SIZE)Precisec                     ^  \ rS rSrS\4U 4S jjr0 4S\4S jjr0 4S jr0 4S\	\
   4S jjr0 4S jrS r0 4S	 jr0 4S
 jrS\
4S jrS0 4S\S\S\4S jjr0 4S\4S jjr0 4S\4S jjr0 4S\4S jjr0 4S\S\4S jjrSIS\S\
S\4S jjrS0 4S\S\4S jjrSIS\S\
S\4S jjr SS0 4S\S\S\S\	\   4S jjr!S\"4S jr#0 4S\$4S jjr%0 4S\"4S jjr&SIS \S\
S\'4S! jjr(S0 4S"\S\)4S# jjr*SSS0 4S\)S\S\S\	\'   4S$ jjr+S0 4S\S%\,S&\-S'\.S(\/4
S) jjr0S0 4S"\S\)4S* jjr1SSS0 4S\)S\S\4S+ jjr2S0 4S,\S'\.S-\S.\)S\34
S/ jjr4S0 r5SSS0 4S,\)S\S\S\	\3   4S1 jjr6SIS2\S3\7S\34S4 jjr8S5\)4S6 jr9SIS3\74S7 jjr:0 4S,\S\;4S8 jjr<0 4S,\S\	\;   4S9 jjr=S:S;0 SS4S< jr>S=\?S>\S?\S@\SA\SB\4SC jr@0 4S,\S\;4SD jjrASESS0 4S\SF\S\S\S\	\B   4
SG jjrCSHrDU =rE$ )Jgemini   returnc                 @  > U R                  [        [        U ]  5       0 SS_SS_SS/_SS_S	S
_SS_S0 SS _SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_0 S S_S!S_S"S_S#S_S$S_S%S_S&S_S'S_S(S_S)S_S*S_S+S_S,S_S-S_S.S_S/S_S0S_E0 S1S_S2S_S3S_S4S_S5S_S6S_S7S_S8S_S9S_S:S_S;S_S<S_S=S_S>S_S?S_S@S_SAS_ESSSSSBSSSSSSSSC.E_SDSESFSFSGSHSI.SJSKSL/SMSMSGSHSI./ SNQSO._SPSQSR/0SQSS/0SQSTSTSTSTSTSTSTSTSTSTSTSTSU.0SV0 SWSX_SYSX_SZSX_S[SX_S\SX_S]SX_S^SX_S_SX_S`SX_SaSX_SbSX_ScSX_SdSX_SeSX_SfSX_SgSX_ShSX_0 SiSX_SjSX_SkSX_SlSX_SmSX_SnSX_SoSX_SpSX_SqSX_SrSX_SsSX_StSX_SuSX_SvSX_SwSX_SxSX_SySX_ESXSXSXSXSXSXSXSz.E0S{._S|[        _S}S~SSS.0_S[
        [        [        [        [        [        [        [        S._SSSSSSSSS._S0 S[
        _S[
        _S[
        _S[
        _S[
        _S[
        _S[
        _S[        _S[
        _S[        _S[        _S[        _S[        _S[        _S[        _S[        _S[
        _[
        [        [        [        [        [        [        [        [        [
        [        [        [        [
        S.E[        [        [        S.S._SSSS/ SQS.SSS.SS/SSTSS.SSSSSSSSSSSSSS.SSSSS.0/ SQS._SSSSS SSSS SSSSS.SSSSSSSS.S SSS S SS.SSSSS.SS SSSS.S S SS 0S.	SS0SS0S S.S S S.S._5      $ )Nidr)   nameGemini	countriesUS	rateLimitd   versionv1proThasCORSspotmarginFswapfutureoption	addMargincancelOrdercloseAllPositionsclosePositioncreateDepositAddresscreateMarketOrdercreateOrdercreateReduceOnlyOrderfetchBalancefetchBidsAsksfetchBorrowRateHistoriesfetchBorrowRateHistoryfetchClosedOrdersfetchCrossBorrowRatefetchCrossBorrowRatesfetchCurrenciesfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchDepositsWithdrawalsfetchFundingHistoryfetchFundingRatefetchFundingRateHistoryfetchFundingRatesfetchIndexOHLCVfetchIsolatedBorrowRatefetchIsolatedBorrowRatesfetchLeveragefetchLeverageTiersfetchMarginModefetchMarketsfetchMarkOHLCVfetchMyTrades
fetchOHLCVfetchOpenInterestHistoryfetchOpenOrders
fetchOrderfetchOrderBookfetchOrdersfetchPositionfetchPositionModefetchPositionsfetchPositionsRiskfetchPremiumIndexOHLCVfetchTickeremulated)fetchTickersfetchTradesfetchTradingFeefetchTradingFeesfetchTransactionspostOnlyreduceMarginsandboxsetLeveragesetMarginModesetPositionModewithdrawurlszchttps://user-images.githubusercontent.com/1294454/27816857-ce7be644-6096-11e7-82d6-3c257263229c.jpgzhttps://api.gemini.comzhttps://docs.gemini.comzhttps://exchange.gemini.com)publicprivatewebwebExchangezhttps://gemini.com/z https://docs.gemini.com/rest-apizhttps://docs.sandbox.gemini.comzhttps://api.sandbox.gemini.com)z#https://gemini.com/api-fee-schedulezhttps://gemini.com/trading-feesz https://gemini.com/transfer-fees)logoapiwwwdoctestfeesr~   get zrest-api   )z
v1/symbolszv1/symbols/details/{symbol}zv1/staking/rateszv1/pubticker/{symbol}zv2/ticker/{symbol}zv2/candles/{symbol}/{timeframe}zv1/trades/{symbol}zv1/auction/{symbol}zv1/auction/{symbol}/historyzv1/pricefeedzv1/book/{symbol}zv1/earn/ratespostzv1/staking/unstake   zv1/staking/stakezv1/staking/rewardszv1/staking/historyzv1/order/newzv1/order/cancelzv1/wrap/{symbol}zv1/order/cancel/sessionzv1/order/cancel/allzv1/order/statusz	v1/orderszv1/mytradeszv1/notionalvolumezv1/tradevolumezv1/clearing/newzv1/clearing/statuszv1/clearing/cancelzv1/clearing/confirmzv1/balanceszv1/balances/stakingzv1/notionalbalances/{currency}zv1/transferszv1/addresses/{network}zv1/deposit/{network}/newAddressz v1/deposit/{currency}/newAddresszv1/withdraw/{currency}zv1/account/transfer/{currency}zv1/payments/addbankzv1/payments/methodszv1/payments/sen/withdrawzv1/balances/earnzv1/earn/interestzv1/earn/historyz&v1/approvedAddresses/{network}/request)z&v1/approvedAddresses/account/{network}z%v1/approvedAddresses/{network}/removez
v1/accountzv1/account/createzv1/account/listzv1/heartbeatzv1/roles)r|   r{   ry   rz   precisionModer   tradinggMbp?gMb`?)takermakerhttpExceptions)400403404406429500502503
timeframes1m5m15m30m1hr6hr1day)r   r   r   r   1h6h1d
exceptionsAuctionNotOpenClientOrderIdTooLongClientOrderIdMustBeStringConflictingOptionsEndpointMismatchEndpointNotFoundIneligibleTimingr   InvalidJsonr%   InvalidApiKeyInvalidOrderTypeInvalidPriceInvalidQuantityInvalidSideInvalidSignatureInvalidSymbol)InvalidTimestampInPayloadMaintenanceMarketNotOpenMissingApikeyHeaderMissingOrderFieldMissingRoleMissingPayloadHeaderMissingSignatureHeaderNoSSLOptionsMustBeArrayr    	RateLimitSystemUnsupportedOption)z8The Gemini Exchange is currently undergoing maintenance.z?We are investigating technical issues with the Gemini Exchange.zInternal Server Error)exactbroadoptionsfetch_markets_from_api
   )USDTGUSDUSDDAIEURGBPSGDBTCETHLTCBCHSOLUSDC)fetchDetailsForAllSymbolsquoteCurrencies)webApiEnablewebApiRetriesbtcusdtethusdt)r   r   webApiMuteFailurefetchTickerV1bitcoinethereumbitcoincashlitecoinzcashfilecoindogecointezos	avalanchesolanacosmospolkadot)r   ERC20r   r   ZECFILDOGEXTZAVAXXr   ATOMDOTmillisecondspaxgusdPAXGr   )basequote)efilusd
maticrlusd	maticusdceurusdc	maticgusdmaticusdefilfileurusd)fetchMarketsMethodfetchMarketFromWebRetriesfetchMarketsFromAPIr\   fetchUsdtMarketsrM   fetchTickerMethodnetworksnonceconflictingMarketsbrokenPairs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  )	rs   rD   createOrdersr^   rb   ra   rd   rJ   r_   extendsdefault)linearinverse)r  r9   r;   r<   )deep_extendsuperr)   describer&   r   r   r    r   r"   r   r#   r$   r%   r   r   )self	__class__s    S/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/async_support/gemini.pyr"  gemini.describe   s%	   fd < > ]A
(]A
H]A
 $]A
 ]A
 t]A
 4]A
  @@@ %@ 	@
 %@ %@ U@ t@ $U@  @ '@ $U@ t@ (@ @   !@" +E#@$ )%%@& $U'@( ')@* (+@, "4-@. &t/@0 (1@2 1$3@4 +D5@6 &u7@8 #E9@: *5;@< $U=@> "5?@@ *5A@B +EC@D  E@F %eG@H "5I@J K@L !%M@N  O@P dQ@R +ES@T "4U@V dW@X !$Y@Z u[@\  ]@^ $U_@` !%a@b %ec@d )%e@f tg@h !%##($(%/  %$!&#( @]A
T }674#@	 -65
 ??
 5#@	/U]A
N   " &'78,-12./;<.//078(),-)*"  *,a**A* -a* -a	*
 '* *1* +A* 21* .q* *1* $Q* &q* ,Q* )!* *1*  -a!*" -a#*$ .q%*& &q'*( .q)** 9!+*, '-*. 1!/*0 :11*2 ;A3*4 1!5*6 9!7*8 .q9*: .q;*< 3A=*> +A?*@ +AA*B *1C*D A!E*F CDAB&'-.+,()$%S*,7HO]A
` Ya]A
b ""c]A
n !'$(($+$	o]A
B C]A
T  $j *J  0  )*	 
 '
  '
  '
  ():  ":  #L  $%8  '  #L  &|  "<   '(;! " $Z# $ 2<#0%1+>)5#6,?.A0*4%2!2+)3? D Q^Wk-AE'U]A
d &>-/16 (F(
 %)%'! &/	$:$(%&)-$
 &5$'(%"%&"(#$% ( &!& '  O(e]A
v #&+(,,0,1).+06:#'#'"&#(	( #($)$)+/27/4#()$, %)&+!$$(%)*.& ',#($)*/	# ',!%#($)*/( $()-#_2h y
 "9  $	 ##{Aw]A
 ] ]	    c                 @   #    U R                  U5      I Sh  vN $  N7f)z
fetches all available currencies on an exchange
:param dict [params]: extra parameters specific to the endpoint
:returns dict: an associative dictionary of currencies
N)fetch_currencies_from_web)r#  paramss     r%  fetch_currenciesgemini.fetch_currencies  s      33F;;;;s   c                   #    U R                  SSSSS5      I Sh  vN nUc  0 $ 0 nU R                  US5      U R                  S'   U R                  US/ 5      n[	        S	[        U5      5       H  nXE   nU R                  US	5      nU R                  U5      nU R                  US
5      (       a  SOSn	U R                  U R                  U R                  US5      5      5      n
0 nU R                  US5      nSnUb(  U R                  U5      nUUUSSSSU
SSS.SSS.S.S.	X'   U R                  UUUU R                  US5      SSSSU	U
SSS.SSS.S.US.5      X8'   M     U$  GNH7f)z
@ignore
       fetches all available currencies on an exchange
       :param dict [params]: extra parameters specific to the endpoint
       :returns dict: an associative dictionary of currencies
       rM   webExchangeGetTz="currencyData">z	</script>NtradingPairs
currenciesr      fiatcryptor   	   minmax)depositrw   )	infor-   networkactiver8  rw   fee	precisionlimitsr   )r9  r-   coder.   r;  r8  rw   r<  typer=  r>  r   )fetch_web_endpoint	safe_listr   
safe_valuerangelensafe_stringsafe_currency_codeparse_numberparse_precisionnetwork_id_to_codesafe_currency_structure)r#  r*  dataresultcurrenciesArrayicurrencyr-   r?  r@  r=  r   	networkIdnetworkCodes                 r%  r)   gemini.fetch_currencies_from_web  s     ,,->@PRVXjlwxx<I* '+~~dN'K^$//$bAq#o./A&)H!!(A.B**2.D!--h::6D))$*>*>t?O?OPXZ[?\*]^IH((15IK$"55i@$#*"# $!* $(#'$
 $(#'%	)%(  77 ((15 &  $# 
  $#!	 %+9 FL? 0l a ys   E&E#EE&c                 t  #    U R                  U R                  SS5      nUS:X  au  / nUR                  U R                  U5      5        UR                  U R	                  U5      5        [
        R                  " U6 I Sh  vN nU R                  US   US   5      $ U R                  U5      I Sh  vN $  N5 N7f)z
retrieves data on all markets for gemini

https://docs.gemini.com/rest-api/#symbols

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict[]: an array of objects representing market data
r   r   fetch_markets_from_webNr   r   )	rC  r   appendrU  fetch_usdt_marketsasynciogatherarray_concatr   )r#  r*  methodpromisespromisesResults        r%  fetch_marketsgemini.fetch_markets  s      /CE]^--HOOD77?@OOD33F;<#*>>8#<<N$$^A%6q8IJJ00888 =8s$   A<B8>B4?0B8/B60B86B8c                   #    U R                  SSSS5      I S h  vN nU R                  S-   nUR                  S5      n[        U5      nUS:  a  [	        U5      eUS   R                  S	5      n[        U5      nUS:  a  [	        U5      e/ n[        SU5       GH  n	Xi   n
U
R                  S
5      n[        U5      nUS:  a  [	        U5      eUS   R                  SS5      nUR                  SS5      nUS   R                  SS5      nUR                  S5      nU R                  US5      nUS   R                  SS5      nUR                  S5      n[        U5      S-
  nUS-
  nUS   R                  SS5      nUR                  S5      nU R                  USUUU 5      nU R                  USUR                  US5      5      nU R                  U5      nU R                  U5      nUR                  0 SU_SUS-   U-   _SU_SU_SS _SU_SU_SS _SS_SS_SS_SS_S S_S!S_S"S _S#S_S$S _S S S S S S U R                  US5      U R                  US5      S%.S S S&.US S&.S S S&.S S S&.S'.S U
S(.
E5        GM     U$  GN_7f))Nr\   webGetRestApiFz7<h1 id="symbols-and-minimums">Symbols and minimums</h1>z fetchMarketsFromWeb() the API doc HTML markup has changed, breaking the parser of order limits and precision info for markets.ztbody>   r   z
<tr>
z</td>
r   r   z<td>r   *    r-   symbol/r   r   settlebaseIdquoteIdsettleIdr@  r9   Tr:   r;   r<   r=   r;  contractr  )amountpricer5  r  rm  rn  cost
r  contractSizeexpiryexpiryDatetimestrike
optionTyper=  r>  createdr9  )rA  r-   splitrE  r!   rD  replacesafe_numbersafe_string_lowerrG  rV  )r#  r*  rL  errortables	numTablesrowsnumRowsrM  rO  rowcellsnumCellsmarketIdminAmountStringminAmountParts	minAmountamountPrecisionStringamountPrecisionPartsidLengthstartingIndexpricePrecisionStringpricePrecisionPartsrj  ri  r   r   s                              r%  rU  gemini.fetch_markets_from_web  sw    ,,^_e  VO  P  P  \  \H%K	q=u%%ayz*d)Q;u%%q'"A'CIIi(E5zH!|"5)) Qx''3H''R0H#Ah..vr:O,2237N((;I$)!H$4$4VR$@!#8#>#>s#C 8}q(H$qLM#(8#3#3FB#? "6"<"<S"A,,-@!Xm\dEefG++,@!XEUEUV]_aEbcF**62D++G4EMM 0h0$*u,0 0 	0
 $0 &0 70 D0 0 0 %0 0 %0 %0 $0  E!0" $#0$   $"&""../CQG!--.A1E  $#!
  )#
  $#
  $#$  _0 0; #\ u Ps   I<I9II<c                 >    SSSSSS.nUc  gU R                  X!S5      $ )NTF)openclosedcancel_only	post_only
limit_only)	safe_boolr#  statusstatusess      r%  parse_market_activegemini.parse_market_activeO  s3    
 >~~h55r'  c                 L  #    SU R                   ;   a  / $ U R                  U R                  S/ 5      n/ n[        S[	        U5      5       HS  nX$   nSU0nU R                  U R                  Xa5      5      I S h  vN nUR                  U R                  U5      5        MU     U$  N*7f)Nr   r   r   rf  )	rx   rC  r   rD  rE  publicGetV1SymbolsDetailsSymbolextendrV  parse_market)r#  r*  r   rM  rO  r  requestrawResponses           r%  rW  gemini.fetch_usdt_markets[  s      TYYI??4<<9KRPq#./0A'*H(G !% D DT[[QXEa bbKMM$++K89 1  cs   A5B$7B"8+B$c           	        #    U R                  U5      I S h  vN n/ nU R                  U R                  S0 5      nU R                  U R                  S/ 5      n/ n[	        S[        U5      5       H1  nU R                  X'   U5      (       a  M  UR                  X'   5        M3     U R                  USS5      (       a  / n[	        S[        U5      5       H:  nXg   n	SU	0n
UR                  U R                  U R                  X5      5      5        M<     [        R                  " U6 I S h  vN n[	        S[        U5      5       H%  nUR                  U R                  X   5      5        M'     U$ U R                  U R                  S5      nUb  U R                  US5      n[	        S[        U5      5       Hc  nXg   n	U R                  XR                  5       5      nUc  M+  U R                  X5      (       a  MC  UR                  U R                  U5      5        Me     U$ [	        S[        U5      5       H@  nU R                  Xg   U5      (       a  M  UR                  U R                  Xg   5      5        MB     U$  GN_ GNR7f)Nr   r   r   r   Frf  r/  )publicGetV1Symbols	safe_dictr   rB  rD  rE  in_arrayrV  r  r  r  rX  rY  r  index_byupper)r#  r*  marketIdsRawrM  r   r   	marketIdsrO  r\  r  r  	responsesr/  indexedTradingPairspairInfos                  r%  r   gemini.fetch_markets_from_apil  s    !44V<< ../DbInnT\\="E	q#l+,A==+>>  1 - >>'#>FFH1c)n-$<h!  D DT[[QXEa bc .$ &nnh77I1c)n-d//	=> .    >>$,,GL'&*mmL!&D#q#i.1A(|H#~~.A>>CSTH+DMM(4X4Xd&7&7&AB	 2  q#i.1A=={CCd&7&7	&EF 2 i =F 8s=   I<I6A1I<BI<'I9(B1I<I<5AI<)I<9I<c                 P   S nS nS nS nS nS nS nS n	Sn
S nS nS n[        U[        5      n[        U[        5      nU(       d  U(       d  U R                  US5      nU R	                  US5      nU R	                  US5      nU R	                  US5      nU R                  U R                  US5      5      n	U R                  US5      nU R                  US5      nU R                  US	5      nGOU(       a  UnOU R                  US
5      nU R                  U R                  U R                  US5      5      5      nU R                  U R                  U R                  US5      5      5      nU R	                  US5      nUR                  5       nUR                  S5      S
:  nUR                  SS5      nU R                  U R                  S0 5      nUR                  5       nUU;   a  UU   nUS   nUS   nU(       a  US   nOyU R                  SS/ 5      n[!        S
[#        U5      5       HM  nUU   nUR%                  U5      (       d  M   U R'                  S[#        U5      -  5      nUS
U nUnU(       a  Un  O   U R)                  U5      nU R)                  U5      nU R)                  U5      nUS-   U-   nUb  US-   U-   nSn
UnSnSnU
(       a  SOSn0 SU_SU_SU_SU_SU_SU_SU_SU_S U_SU
(       + _S!S_SU
_S"S_S#S_S$U	_S%U
_S&U_UUS S S S UUS'.S S S(.US S(.S S S(.S S S(.S).S US*.
E$ )+NFrf  	tick_sizequote_incrementmin_order_sizer  base_currencyquote_currencycontract_price_currencyr   r   rb  re  PERPr   r   r   r   r   r   rg  :Tr;   r9   r-   rh  ri  rj  rk  r@  r:   r<   r=   r;  rl  r  )rn  rm  r5  ro  rq  )
isinstancestrlistr{  rz  r  rF  rH  rI  r  findry  r  r   lowerhandle_optionrD  rE  endswithparse_to_intrG  )r#  responser  ri  rj  rk  tickSizeamountPrecisionminSizer  r;   rr  r  r  isStringisArraymarketIdUpperisPerpmarketIdWithoutPerpr   lowerCaseIdconflictingMarketr   rO  quoteCurrencyquoteLengthr   r   rh  rf  r@  s                                  r%  r  gemini.parse_market  s9   B x-h---hAH"..xEO''2CDH&&x1ABG--d.>.>x.RSF%%h@F&&x1ABG''2KLH #11(A>,,T-A-A$BRBRS[]^B_-`a"&"3"3D4H4HIYIYZbdeIf4g"h**8Q7$NN,M#((0A5F"/"7"7"C!%>RTV!W-335K00$6{$C!*62+G409H"&"4"45JL]_a"bq#o"67A$3A$6M*33MBB&*&7&7S=O8O&P!4Q{!C"/!'4H 8 &&v.''0((2e#c\F*FD#LFGv60
(0
f0
 D0
 U	0

 f0
 f0
 w0
 0
 D0
 H0
 e0
 D0
 e0
 e0
 f0
  !0
" f#0
$ ("!)  
 #
  
  $ _0
 0	
r'  Nrf  r  c           	      
  #    U R                  5       I Sh  vN   U R                  U5      nSUS   0nUb  X%S'   X%S'   U R                  U R                  XS5      5      I Sh  vN nU R	                  XdS   SSSSS	5      $  Nh N7f)
a  
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

https://docs.gemini.com/rest-api/#current-order-book

: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
Nrf  r-   
limit_bids
limit_asksbidsasksrn  rm  )load_marketsmarketpublicGetV1BookSymbolr  parse_order_book)r#  rf  r  r*  r  r  r  s          r%  fetch_order_bookgemini.fetch_order_book7  s      !!!V$fTl
 $)L!$)L!33DKK4PQQ$$Xh/?vvW^`hii 	" Rs"   BA?A
B!B"BBc                    #    U R                  5       I S h  vN   U R                  U5      nSUS   0nU R                  U R                  XB5      5      I S h  vN nU R	                  XS5      $  NU N7fNrf  r-   )r  r  publicGetV1PubtickerSymbolr  parse_tickerr#  rf  r*  r  r  r  s         r%  fetch_ticker_v1gemini.fetch_ticker_v1M  sq     !!!V$fTl
 88W9UVV   22% 	"
 W!   A0A,?A0A.A0.A0c                    #    U R                  5       I S h  vN   U R                  U5      nSUS   0nU R                  U R                  XB5      5      I S h  vN nU R	                  XS5      $  NU N7fr  )r  r  publicGetV2TickerSymbolr  r  r  s         r%  fetch_ticker_v2gemini.fetch_ticker_v2b  sq     !!!V$fTl
 55dkk'6RSS   22' 	"
 Tr  c                    #    U R                  X5      nU R                  X5      n[        R                  " X4/6 I S h  vN u  pVU R	                  UUS   US   US   US   US   US   US   S.5      $  N57f)	Nr  highlowchange
percentageaverager9  )r  r  r  r  r  r  r9  )r  r  rX  rY  r   )r#  rf  r*  tickerPromiseAtickerPromiseBtickerAtickerBs          r%  fetch_ticker_v1_and_v2gemini.fetch_ticker_v1_and_v2x  s     --f=--f=!(.1Q!RRFOFO5>h'!,/y)FO*
  	 Ss   :A4A26A4c                    #    U R                  U R                  SS5      nUS:X  a  U R                  X5      I Sh  vN $ US:X  a  U R                  X5      I Sh  vN $ U R	                  X5      I Sh  vN $  N< N N7f)a  
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

https://docs.gemini.com/rest-api/#ticker
https://docs.gemini.com/rest-api/#ticker-v2

:param str symbol: unified symbol of the market to fetch the ticker for
:param dict [params]: extra parameters specific to the exchange API endpoint
:param dict [params.fetchTickerMethod]: 'fetchTickerV2', 'fetchTickerV1' or 'fetchTickerV1AndV2' - 'fetchTickerV1' for original ccxt.gemini.fetchTicker - 'fetchTickerV1AndV2' for 2 api calls to get the result of both fetchTicker methods - default = 'fetchTickerV1'
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
r   r   NfetchTickerV2)rC  r   r  r  r  )r#  rf  r*  r[  s       r%  fetch_tickergemini.fetch_ticker  su      /BOT_$--f===_$--f===00@@@ >=@s3   8A=A7A=A9A=2A;3A=9A=;A=tickerr  c                    U R                  US0 5      nU R                  US5      nS nU R                  US5      nU R                  Xb5      nS nS nS n	S n
UbV  UcS  [	        U5      S-
  nUS:X  a  USS nUSS nO
USS nUSS nU R                  U5      n	U R                  U5      n
U	S	-   U
-   nUc,  Ub)  US
   nU R                  US5      nU R                  US5      nU R                  US5      nU R                  USSU5      nU R                  US5      nU R                  US5      nU R                  X75      nU R                  X85      nU R                  0 S
U_SU_SU R                  U5      _SU R                  US5      _SU R                  US5      _SU R                  US5      _SS _SU R                  US5      _SS _SS _SU_SU_SU_SS _SS _SU_SS _UUUS.EU5      $ )Nvolume	timestamppairr   r1     re     rg  rf  ri  rj  rn  lastclosepercentChange24hr  datetimer  r  bid	bidVolumeask	askVolumevwappreviousCloser  r  r  )
baseVolumequoteVolumer9  )rC  safe_integerr{  safe_marketrE  rG  safe_string_upperrF  safe_string_2safe_tickeriso8601)r#  r  r  r  r  rf  r  ri  rj  r   r   r  rn  r  r  r  r  r  s                     r%  r  gemini.parse_ticker  s   J 26%%fk:	))&&9!!(3 v~8}q(H1}!!A"1Q-!!A"1Q-**62D++G4ECZ%'FN!3H%F++FH=F,,VY?G  1!!&&'5A%%f.@A
/%%f5
&&v7 !
f!
!
 Y/!
 D$$VV4	!

 4##FE2!
 4##FE2!
 !
 4##FE2!
 !
 D!
 D!
 T!
 D!
 T!
 d!
  *!!
" t#!
$ %&)!
* + 	r'  symbolsc                    #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  X15      nU R                  U R                  S/ 5      nU R                  XE5      $  N\ NE7f)a  
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market

https://docs.gemini.com/rest-api/#price-feed

: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   )r  publicGetV1Pricefeedparse_tickersrB  r   remove_keys_from_dict)r#  r  r*  r  rM  r   s         r%  fetch_tickersgemini.fetch_tickers  sm      !!!226:: ##H6nnT\\="E))&>>% 	":s    A7A3A7A5AA75A7tradec                    U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nU R                  U5      nU R                  US5      US.nU R                  US5      n	U R                  US5      n
U R                  US	5      nU R	                  S U5      nU R                  UUUUU R                  U5      US US U	S U
US
.U5      $ )Ntimestampmstidorder_idfee_currency
fee_amountrp  rP  rn  rm  r@  )r-   orderr9  r  r  rf  r@  sidetakerOrMakerrn  rp  rm  r<  )r  rF  rG  r{  safe_symbol
safe_trader  )r#  r  r  r  r-   orderIdfeeCurrencyIdfeeCurrencyCoder<  priceStringamountStringr  rf  s                r%  parse_tradegemini.parse_trade  s   D %%e];	eU+""5*5((?11-@$$UL9'
 &&ug6''x8%%eV4!!$/"Y/  " 
  	r'  sincec                   #    U R                  5       I Sh  vN   U R                  U5      nSUS   0nUb  [        US5      US'   Ub  X&S'   U R                  U R	                  Xd5      5      I Sh  vN nU R                  XuX#5      $  No N7f)a  
get the list of most recent trades for a particular symbol

https://docs.gemini.com/rest-api/#trade-history

: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>`
Nrf  r-   r  limit_tradesr  )r  r  r6  publicGetV1TradesSymbolr  parse_tradesr#  rf  r*  r  r*  r  r  r  s           r%  fetch_tradesgemini.fetch_tradesP  s      !!!V$fTl
 &)%oGN##(K 55dkk'6RSS   5@@/ 	" Ts"   B
BAB
/B0B
B
c                 .   SU0n[        S[        U5      5       Hh  nX   nU R                  US5      nU R                  U5      nU R	                  5       nU R                  US5      US'   U R                  US5      US'   XrU'   Mj     U R                  U5      $ )Nr9  r   rP  	availablefreerm  total)rD  rE  rF  rG  accountsafe_balance)r#  r  rM  rO  balance
currencyIdr?  r6  s           r%  parse_balancegemini.parse_balanceu  s    )q#h-(AkG))':>J**:6DllnG"..wDGFO#//BGG"4L )   ((r'  c                   #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  US5      nU R                  US5      n[        R                  " US5      n[        R                  " US5      nU R                  U5      nU R                  U5      n0 n	[        S[        U R                  5      5       H  n
U R                  U
   nUUUUSSS.X'   M     U	$  N N7f)a(  
fetch the trading fees for multiple markets

https://docs.gemini.com/rest-api/#get-notional-volume

: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
Napi_maker_fee_bpsapi_taker_fee_bps10000r   T)r9  rf  r   r   r  	tierBased)	r  privatePostV1NotionalvolumerF  r'   
string_divrH  rD  rE  r  )r#  r*  r  makerBpstakerBpsmakerStringtakerStringr   r   rM  rO  rf  s               r%  fetch_trading_feesgemini.fetch_trading_fees  s      !!!99&AA: ##H.AB##H.AB((7;((7;!!+.!!+.q#dll+,A\\!_F  "!FN - _ 	"As    C0C,C0C.B=C0.C0c                    #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nU R                  U5      $  N. N7f)a<  
query for balance and get the amount of funds available for trading or funds locked in orders

https://docs.gemini.com/rest-api/#get-available-balances

:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
N)r  privatePostV1Balancesr:  )r#  r*  r  s      r%  fetch_balancegemini.fetch_balance  sE      !!!33F;;!!(++ 	";s   A	AA	AA	A	r  c                 h   U R                  US5      nU R                  US5      nU R                  US5      nU R                  US5      nSnUS   (       a  SnUS   (       a  S	nU R                  US
5      nU R                  US5      n	U R                  US5      n
U
S:X  a  Sn
OU
S:X  d  U
S:X  a  Sn
OUS   n
S nU R                  US5      nU R                  X5      nU R                  US5      nU R                  US5      nU R                  US5      nU R	                  US/ 5      nU R                  US5      nSnSnUb  US:X  a  SnOUS:X  a  SnO
US:X  a  SnS nU R                  0 S!U_S"U_S#U_S$U_S%U R                  U5      _S&S _S'U_SU_SU
_S(U_S)U_SU_S
U_S*S _S+U	_S,S _S-U_UUUS S..EU5      $ )/Nr  original_amountremaining_amountexecuted_amountr  is_liver  is_cancelledcanceledrn  avg_execution_pricer@  exchange limitr  z
market buyzmarket sellr  rf  r  r  client_order_idr   r   GTCFimmediate-or-cancelr  fill-or-killr  maker-or-cancelr  Tr-   clientOrderIdr9  r  r  lastTradeTimestampr  r  rq   r  r  rp  rm  )filled	remainingr<  trades)r  rF  r!  r{  rC  
safe_orderr  )r#  r  r  r  rm  r^  r]  r  rn  r  r@  r<  r  rf  r-   r  r[  optionsArrayr=   r  rq   s                        r%  parse_ordergemini.parse_order  s   F %%e];	!!%):;$$U,>?	!!%):;F F  0""5*?@v.##D\!T]%:D=D##E84!!(3eZ0%%eV4((0ABui<!!,2..#>)#,,"  
" 
] 
 E 
 	 

 Y/ 
 !$ 
 f 
 f 
 D 
 ; 
  
 D 
 U 
 D 
 w 
  D! 
" f# 
$ "+ 
, - 	r'  r-   c                    #    U R                  5       I Sh  vN   SU0nU R                  U R                  XC5      5      I Sh  vN nU R                  U5      $  NA N7f)a`  
fetches information on an order made by the user

https://docs.gemini.com/rest-api/#order-status

: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  )r  privatePostV1OrderStatusr  rb  r#  r-   rf  r*  r  r  s         r%  fetch_ordergemini.fetch_orderg  sa      !!!
 66t{{77STT0 ))9 	" U!   AA+AAAAc                    #    U R                  5       I Sh  vN   U R                  U5      I Sh  vN nSnUb  U R                  U5      nU R                  XVX#5      $  NE N.7f)a  
fetch all unfilled currently open orders

https://docs.gemini.com/rest-api/#get-active-orders

: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>`
N)r  privatePostV1Ordersr  parse_orders)r#  rf  r*  r  r*  r  r  s          r%  fetch_open_ordersgemini.fetch_open_orders  sb      !!!11&994 [[(F  5@@= 	"9s   A AA A-A A r@  r  rm  rn  c                 ^  #    U R                  5       I Sh  vN   US:w  a  [        U R                  S-   5      eU R                  USS5      nU R	                  USS/5      nUc  [        U R                  5       5      nU R                  U5      nU R                  X5      n	U R                  X5      n
UUS   U	U
USS.nU R                  US	U5      nU R	                  US	5      nU R                  U/ S
Q5      nU R	                  U/ SQ5      nUS:X  a  [        U R                  S-   U-   S-   5      eUb  U R                  X5      US'   SUS	'   OU R                  US5      nU R	                  US5      nUb2  US:X  d  US:X  a  S/US'   OUS:X  d  US:X  a  S/US'   OUS:X  a  S/US'   U R                  USS5      nU R	                  US5      nU(       a  S/US'   U R                  US5      nUb  U/US'   U R                  U R                  X5      5      I Sh  vN nU R!                  U5      $  GN N7f)aA  
create a trade order

https://docs.gemini.com/rest-api/#new-order

:param str symbol: unified symbol of the market to create an order in
:param str type: must be '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>`
Nr  z' createOrder() allows limit orders onlyr[  rV  r-   rU  )rV  rf  rm  rn  r  r@  r@  )r  
stop_price	stopPrice)r  rp  rq  r@  	stopLimitzO createOrder() requires a triggerPrice parameter or a stop_price parameter for z ordersrp  zexchange stop limitr  r  rX  r   r  rY  r  rZ  rq   F)r  r   r-   r  omitr  r   r  amount_to_precisionprice_to_precisionrF  safe_string_nr   r  privatePostV1OrderNewr  rb  )r#  rf  r@  r  rm  rn  r*  r[  r  r'  r&  r  r  r  rq   r   r  s                    r%  create_ordergemini.create_order  sy     !!!7?*S STT**6?DUV6O5F#GH  1 1 34MV$//?--f<,Tl" $
 566*))&2]^6#VW;#DGG.$  CG  %G  JS  %S  T  T#$($;$;F$QGL!3GFO **6=AKYYv}5F&5(k=R.R*?)@GI&!U*~0M*8)9GI& D(*;)<GI&~~fj%@HYYvz2F&7%8	"&&vy9G"&-Y	"33DKK4PQQ0 ))O 	"^ Rs"   H-H(G;H-H+H-+H-c                    #    U R                  5       I Sh  vN   SU0nU R                  U R                  XC5      5      I Sh  vN nU R                  U5      $  NA N7f)aE  
cancels an open order

https://docs.gemini.com/rest-api/#cancel-order

: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  )r  privatePostV1OrderCancelr  rb  rf  s         r%  cancel_ordergemini.cancel_order  sa      !!!
 66t{{77STT2 )); 	" Uri  c                 ^  #    Uc  [        U R                  S-   5      eU R                  5       I Sh  vN   U R                  U5      nSUS   0nUb  X6S'   Ub  U R	                  US-  5      US'   U R                  U R                  Xd5      5      I Sh  vN nU R                  XuX#5      $  Nw N7f)a  
fetch all trades made by the user

https://docs.gemini.com/rest-api/#get-past-trades

: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>`
Nz+ fetchMyTrades() requires a symbol argumentrf  r-   r,  i  r  )r   r-   r  r  r  privatePostV1Mytradesr  r.  r/  s           r%  fetch_my_tradesgemini.fetch_my_trades=  s      >#DGG.[$[\\!!!V$fTl
 &+N##'#4#4UT\#BGK 33DKK4PQQ  5@@ 	" Rs"   /B-B)A B-B+B-+B-r?  addresstagc                   #    U R                  XE5      u  pEU R                  U5        U R                  5       I Sh  vN   U R                  U5      nUS   UUS.nU R	                  U R                  Xu5      5      I Sh  vN nU R                  US5      n	U	S:X  a*  [        U R                  S-   U R                  U5      -   5      eU R                  X5      $  N NY7f)a  
make a withdrawal

https://docs.gemini.com/rest-api/#withdraw-crypto-funds

:param str code: unified currency code
:param float amount: the amount to withdraw
:param str address: the address to withdraw to
:param str tag:
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
Nr-   )rP  rm  r  rM  r|  z withdraw() failed: )handle_withdraw_tag_and_paramscheck_addressr  rP  privatePostV1WithdrawCurrencyr  rF  r   r-   jsonparse_transaction)
r#  r?  rm  r  r  r*  rP  r  r  rM  s
             r%  rw   gemini.withdrawW  s      99#F7#!!!==& 

 ;;DKK<XYY0 !!(H5W*@ @499XCV VWW%%h99E 	" Zs#   8CCAC<C=ACCc                     U R                  U R                  SS5      nUS:X  a  U R                  5       $ U R                  5       $ )Nr   r   )rF  r   r   seconds)r#  nonceMethods     r%  r   gemini.nonce  s=    &&t||WnM.($$&&||~r'  c                    #    U R                  5       I Sh  vN   0 nUb  X5S'   Ub  X%S'   U R                  U R                  XT5      5      I Sh  vN nU R                  U5      $  NM N7f)a  
fetch history of deposits and withdrawals

https://docs.gemini.com/rest-api/#transfers

: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>`
Nlimit_transfersr  )r  privatePostV1Transfersr  parse_transactions)r#  r?  r*  r  r*  r  r  s          r%  fetch_deposits_withdrawals!gemini.fetch_deposits_withdrawals  ss      !!!).%&#(K 44T[[5QRR&&x00 	" Ss!   A(A$7A(A&A(&A(transactionrP  c                 D   U R                  US5      nU R                  US5      nU R                  XB5      nU R                  US5      nU R                  US5      nU R                  US5      nS n	U R	                  US5      n
U
b  U
US.n	0 SU_S	U R                  US
S5      _SU R                  US5      _SU_SU R                  U5      _SS _SU_SS _SS _SS _SS _SS _SU_SU R	                  US5      _SU_SU R                  U5      _SS _S U R                  US5      U	S.E$ )Nr  rP  destinationr@  r  	feeAmountr  r9  r-   eidwithdrawalIdtxidtxHashr  r  r:  r  	addressToaddressFromr  tagTotagFromrm  updatedmessage)internalcommentr<  )r  rF  rG  r{  rz  r  r  parse_transaction_status)r#  r  rP  r  r9  r?  r  r@  	statusRawr<  r  s              r%  r  gemini.parse_transaction  s   & %%k=A	%%k:>
&&z<"";>%%k6:$$[(;	$$[+>	 ! C
K
$$$[%H
 D$$[(;
 	

 Y/
 t
 w
 
 4
 4
 T
 t
 D
 d&&{H=
 
  d33I>!
" t#
$ ''Y?)
 	
r'  r  c                 0    SSS.nU R                  X!U5      $ )Nok)AdvancedComplete)rF  r  s      r%  r  gemini.parse_transaction_status  s$    
 &99r'  c                 Z    U R                  US5      nU R                  S U5      nUS US US.$ )Nr  )rP  r:  r  r  r9  )rF  rG  )r#  depositAddressrP  r  r?  s        r%  parse_deposit_addressgemini.parse_deposit_address  sA     "">9=&&tX6"
 	
r'  c                   #    U R                  5       I Sh  vN   U R                  X5      I Sh  vN nSnU R                  U5      u  pBU R                  U R	                  X45      S5      nU R	                  XQ5      $  Nd NM7f)a}  

https://docs.gemini.com/rest-api/#get-deposit-addresses

fetch the deposit address for a currency associated with self account
:param str code: unified currency code
:param dict [params]: extra parameters specific to the endpoint
:param str [params.network]:  *required* The chain of currency
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
NrP  )r  "fetch_deposit_addresses_by_networkhandle_network_code_and_paramsr  rC  )r#  r?  r*  groupedByNetworkrR  networkGroups         r%  fetch_deposit_addressgemini.fetch_deposit_address  sw      !!!!%!H!H!VV"AA&I}}T__5E%SU_`|22 	"Vs    A?A;A?A=AA?=A?c                   #    U R                  5       I Sh  vN   U R                  U5      nUS   nSnU R                  U5      u  pBUc  [        U R                  S-   5      eU R                  U5      nSU0nU R                  U R                  Xb5      5      I Sh  vN nU R                  Xq/SXAS.5      nU R                  US5      $  N N.7f)a  
fetch a dictionary of addresses for a currency, indexed by network

https://docs.gemini.com/rest-api/#get-deposit-addresses

:param str code: unified currency code of the currency for the deposit address
:param dict [params]: extra parameters specific to the exchange API endpoint
:param str [params.network]:  *required* The chain of currency
:returns dict: a dictionary of `address structures <https://docs.ccxt.com/#/?id=address-structure>` indexed by the network
Nr?  z5 fetchDepositAddresses() requires a network parameterr:  F)r:  rP  )
r  rP  r  r   r-   network_code_to_idprivatePostV1AddressesNetworkr  parse_deposit_addressesgroup_by)	r#  r?  r*  rP  rR  rQ  r  r  resultss	            r%  r  )gemini.fetch_deposit_addresses_by_network  s      !!!==&"AA&I#DGG.e$eff++K8	y
 ;;DKK<XYY..xT_Hrs}}Wi00 	" Zs"   C
CBC
C-C
C
ry   GETc                    SU R                  X5      -   nU R                  X@R                  U5      5      nUS:X  a  U R                  5         U R                  n	U	R                  S5      S:  a  [        U R                  S-   5      e[        U R                  5       5      n
U R                  UU
S.U5      nU R                  U5      nU R                  U5      nU R                  U R                  U5      U R                  U R                  5      [         R"                  5      nSU R                  UUS.nOU(       a  US	U R%                  U5      -   -  nU R&                  S
   U   U-   nUS:X  d  US:X  a  U R                  U5      nXsXeS.$ )Nrg  rz   r6  r   z> sign() requires an account-key, master-keys are not-supported)r  r   z
text/plain)zContent-TypezX-GEMINI-APIKEYzX-GEMINI-PAYLOADzX-GEMINI-SIGNATURE?r~   POSTDELETE)urlr[  bodyheaders)implode_paramsrs  extract_paramscheck_required_credentialsapiKeyr  r   r-   r  r   r  r  string_to_base64hmacencodesecrethashlibsha384	urlencoderx   )r#  pathr~   r[  r*  r  r  r  queryr  r   r  payload	signatures                 r%  signgemini.sign"  sd   D''55		&"5"5d";<)++-[[F{{9%))$''4t*tuu

%Ekk# G ii(G++G4G		$++g"6DKK8PRYR`R`aI ,#';;$+&/	G sT^^E222iis#c)f&H"499U#DdOOr'  httpCodereasonr  r[  r  r  c
                    UcG  [        U[        5      (       a1  U R                  S-   U-   n
U R                  U R                  S   Xj5        g U R                  US5      nUS:X  a  U R                  US5      nU R                  US5      nU R                  S-   U-   n
U R                  U R                  S   X5        U R                  U R                  S   X5        U R                  U R                  S   X5        [        U
5      eg )Nrd  r   rM  r|  r  r  r   )r  r  r-   throw_broadly_matched_exceptionr   rF  throw_exactly_matched_exceptionr   )r#  r  r  r  r[  r  r  r  requestHeadersrequestBodyfeedbackrM  reasonInnerr  s                 r%  handle_errorsgemini.handle_errors@  s    $$$77S=4/44T__W5Mt^ !!(H5W**8X>K&&x;Gww}w.H001I;a001I7]001I7]))r'  c                   #    U R                  5       I Sh  vN   U R                  U5      nSUS   0nU R                  U R                  XB5      5      I Sh  vN nU R	                  US5      nU R                  U5        UUSSUS.$  No N17f)aM  
create a currency deposit address

https://docs.gemini.com/rest-api/#new-deposit-address

:param str code: unified currency code of the currency for the deposit address
:param dict [params]: extra parameters specific to the exchange API endpoint
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
NrP  r-   r  )rP  r  r  r:  r9  )r  rP  &privatePostV1DepositCurrencyNewAddressr  rF  r  )r#  r?  r*  rP  r  r  r  s          r%  create_deposit_addressgemini.create_deposit_addressX  s      !!!==&
 DDT[[QXEabb""8Y77#
 	
 	"
 cs!   B
B?B
B0B
B
r   	timeframec                 "  #    U R                  5       I Sh  vN   U R                  U5      nU R                  U R                  X"5      nUUS   S.nU R	                  U R                  X5      5      I Sh  vN n	U R                  XX#U5      $  Nt N7f)a=  
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market

https://docs.gemini.com/rest-api/#candles

: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  rf  )r  r  rF  r   !publicGetV2CandlesSymbolTimeframer  parse_ohlcvs)
r#  rf  r  r*  r  r*  r  timeframeIdr  r  s
             r%  fetch_ohlcvgemini.fetch_ohlcvr  s      !!!V$&&t	M$Tl
 ??G@\]]   9UKK 	" ^s"   BBAB3B4BB )N)F__name__
__module____qualname____firstlineno__r   r"  r   r+  r)  r   r   r^  rU  r  rW  r   r  r  r
   r   r  r  r  r  r   r  dictr  r   r   r  r   r(  r0  r   r:  r   rG  rK  r   rb  r   rg  rm  r   r   floatr   rx  r|  r  r   rw   r   r  r   r  r  r  r	   r  r  r  intr  r  r  r  __static_attributes____classcell__)r$  s   @r%  r)   r)      s;   ^# ^@ -/ <: < 68 Wr *, 9V 9$ 35 [z
6 /1 " 35 5nR
 R
h @DB jS j jS\ j, 9; 3C 3* 9; 3C 3, @B 3  68 A AF A&X4 X X6 Xt 6:" ?7 ? ?<= =v = =~ <@d[] #A #AS #A #Abfglbm #AJ
) 
) /1 8[ 8t *, , ,] ]v ] ]~ 8<B '*C '* '*R 59tZ^gi *Ac *A *ATW *Anrsxny *AX mqy{ U* U*I U*Y U*X] U*fi U*n 9=R (*S (*# (*T 37TX\eg AC As ARU A4 QU]_ 1:3 1: 1: 1:# 1:do 1:f <@daenp 1S 1 1[^ 1uy  {F  vG 1*6
T 6
X 6
Q\ 6
p:s :
h 
$ =? 3 3> 3$ JL 1S 1PTUcPd 14 &eBSW P<c 3 S # X\ dg 0 >@ 
 
N 
4 ?CQUdhqs L L L3 L^a Lx|  ~B  yC L Lr'  r)   )/ ccxt.async_support.base.exchanger   ccxt.abstract.geminir   rX  r  ccxt.base.typesr   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'  r%  <module>r     sy    6 ,   J  J  J  J  J  J  * 0 - . ' . ) * ) . 1 * ) 4 %qLX{ qLr'  