
    ei~m                        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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&  G d d          Z'dS )    N)%AuthenticationErrorNotSupportedInvalidProxySettingsExchangeNotAvailableOperationFailedOnMaintenanceget_cli_arg_valueget_root_diris_syncdump
json_parsejson_stringifyconvert_asciiio_file_existsio_file_readio_dir_readcall_methodcall_method_sync call_exchange_method_dynamically%call_exchange_method_dynamically_syncget_root_exceptionexception_messageexit_scriptget_exchange_propset_exchange_propinit_exchangeget_test_files_syncget_test_filesset_fetch_responseis_null_valuecloseget_env_varsget_langget_ext
is_windowsis_linuxis_amd64c                   L   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZg Zi Zi Zi Zi Zi ZdZdZdZd Zd Zd Zd Zd Zd	 Zd
 Zd Z d Z!d Z"g dfdZ#d Z$d Z%d Z&d Z'dQdZ(dRdZ)dRdZ*dQdZ+d Z,d Z-d Z.d Z/d Z0dQdZ1d Z2d  Z3dQd!Z4d" Z5d# Z6dSd$Z7dSd%Z8dQd&Z9d' Z:d( Z;d) Z<d* Z=d+ Z>d, Z?dQd-Z@dQd.ZAdQd/ZBd0 ZCdTd1ZDdTd2ZEdTd3ZFd4 ZGd5 ZHd6 ZId7 ZJd8 ZKd9 ZLd: ZMd; ZNd< ZOd= ZPd> ZQd? ZRd@ ZSdA ZTdB ZUdC ZVdD ZWdE ZXdF ZYdG ZZdH Z[dI Z\dJ Z]dK Z^dL Z_dM Z`dN ZadO ZbdP ZcdS )UtestMainClassF proxiesc                 F   t          d          pt          d          | _        t          d          | _        t          d          pt          d          | _        t          d          | _        t          d          | _        t          d          | _        t          d	          | _        t          d
          | _        t          d          | _	        t          d          | _
        t          d          | _        t                      | _        t                      | _        d S )Nz--responseTestsz
--responsez	--idTestsz--requestTestsz	--requestz--infoz	--verbosez--debugz	--privatez--privateOnlyz	--sandboxz
--loadKeysz--ws)r	   response_testsid_testsrequest_testsinfoverbosedebugprivate_testprivate_test_onlysandbox	load_keysws_testsr#   langr$   ext)selfs    S/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/test/tests_async.pyparse_cli_args_and_propsz&testMainClass.parse_cli_args_and_props    s    /0ABBeFWXdFeFe)+66./?@@bDUVaDbDb%h//	(55&y11
-k::!2?!C!C(55*<88)&11JJ	99    c                    K   	 |                      |||           d {V  d S # t          $ r}t          d           |d }~ww xY w)N[TEST_FAILURE])
init_inner	Exceptionr   )r:   exchange_idsymbol_argvmethod_argves        r;   initztestMainClass.init/   sl      	//+{KHHHHHHHHHHH 	 	 	!"""G	s   # 
A>Ac                 8  K   |                                   | j        rA| j        r:|                     ||           d {V  |                     ||           d {V  dS | j        r|                     ||           d {V  dS | j        r|                     ||           d {V  dS | j        r|                                  d {V  dS d}t          |dz   |z   dz   dz   | j        |||| j	        t          d          d|           | j        | j        ddd}t          ||| j	                  }|j        r2t          |                     d	d
                     t!          d           |                     |           d {V  t%          t'          | j                                                            dk    s
J d            |                     |           |                     |           |                     ||           d {V  t!          d           d S )NT
r*   z[INFO] TESTING 
--useProxy)exchangesymbolmethodisWsuseProxy0u  )r1   r2   enableRateLimittimeoutz[INFO] skipping alias   r   zTest files were not loaded)r<   r/   r-   run_static_request_testsrun_static_response_testsr.   run_broker_id_testsr   r9   r7   r	   r1   r2   r   aliasadd_paddingr   import_fileslenlist
test_fileskeysexpand_settings check_if_specific_test_is_chosen
start_test)r:   rB   rC   rD   new_lineexchange_argsrJ   s          r;   r@   ztestMainClass.init_inner6   s     %%''' 	$"5 	//[IIIIIIIII00kJJJJJJJJJ4 	00kJJJJJJJJJ4 	//[IIIIIIIII4= 	**,,,,,,,,,4X]X%*->>#!!M),77K
 K
 	 	 	 |Z#	
 
 !mT]KK> 	!!"92>>???NNN)))))))))4,,..//0014446R444X&&&--k:::ooh444444444Ar=   c                    |t          | j                                                  }|                    d          }t	          |          dk    rt          dt	          |                    D ]l}||         }t          dt	          |                    D ]@}||         }|                    dd          }||k    r| j                            |           Aid S d S d S )N,   r   z()r*   )	rZ   r[   r\   splitrY   rangereplaceonly_specific_testsappend)r:   rD   test_file_namespossible_method_namesitest_file_namejmethod_names           r;   r^   z.testMainClass.check_if_specific_test_is_chosen^   s    ""4?#7#7#9#9::O$/$5$5c$:$:!())Q..q#o"6"677 L LA%4Q%7N"1c*?&@&@AA L L&;A&>&1&9&9$&C&C)[88 4;;NKKK	L #" /.L Lr=   c                   K   t          |j                                                  }|                    d           t	                      rt          || j                  | _        n t          || j                   d {V | _        dS )NloadMarketsT)	rZ   hasr\   ri   r   r   r7   r[   r   )r:   rJ   
propertiess      r;   rX   ztestMainClass.import_filesk   s      (,++--..
-(((99 	N1*dmLLDOO$2:t}$M$MMMMMMMDOtr=   c                    |j         }t          |d          }t          |                                          }t	          dt          |                    D ]o}||         }||         }|r[t          ||          K|dz   |z   }|                                }	t                      }
|	|
v r|
|	         nd }|rt          |||           pd S )NrequiredCredentialsr   _)	idr   rZ   r\   rf   rY   upperr"   r   )r:   rJ   rB   	req_credsobjkeysrl   
credentialis_requiredfull_keycredential_env_nameenv_varscredential_values               r;   load_credentials_from_envz'testMainClass.load_credentials_from_envt   s    k%h0JKK	y~~''((q#g,,'' 		N 		NA J#J/K N0:FFN&,z9&.nn&6&6#'>>EX\dEdEd8,?#@#@ko # N%h
<LMMM		N 		Nr=   c                    |j         }t                      dz   }t                      dz   }t          |          }t          |          }i }|rt          |          }i }|rt          |          }|                    ||          }	|                    |	|i           }
|
rt          |
                                          }t          dt          |                    D ]v}||         }|
|         rdd }t          |
|         t                    r.t          ||i           }|                    ||
|                   }n|
|         }t          |||           w| j        r|                     |           t                      dz   }t          |          }|                    ||i           | _        | j        }|                    |d          }||                    |          |_        t'          d          rl|                    |d          |_        |                    |d          |_        |                    |d	          |_        |                    |d
          |_        |                    |di           | _        i | _        d S )Nz	keys.jsonzkeys.local.jsonr   zskip-tests.jsonrQ   rI   	httpProxy
httpsProxywsProxywssProxyskipMethods)rw   r
   r   r   deep_extend
safe_valuerZ   r\   rf   rY   
isinstancedictr   r   r6   r   skipped_settings_for_exchangeparse_to_intrQ   r	   safe_string
http_proxyhttps_proxyws_proxy	wss_proxyskipped_methodschecked_public_tests)r:   rJ   rB   keys_global
keys_localkeys_global_existskeys_local_existsglobal_settingslocal_settingsall_settingsexchange_settingssetting_keysrl   keyfinal_valueexistingskipped_fileskipped_settingsr   rQ   s                       r;   r]   ztestMainClass.expand_settings   s   k"nn{2!^^&77
+K88*:66 	8*;77O 	6)*55N++O^LL$//k2NN 	B 1 6 6 8 899L1c,//00 	B 	B"1o$S) B"&K!"3C"8$?? =#4XsB#G#G&.&:&:8EVWZE[&\&\&7&<%h[AAA> 	5**8444#~~(99'55-5-@-@AQS^`b-c-c*(,(J%%%&CYOO'44W==H\** 	a"*"6"67TVa"b"bH#+#7#78UWc#d#dH  ( 4 45RT] ^ ^H!)!5!56SU_!`!`H'223PR_acdd$&!!!r=   c                 z    d}t          |          }||z
  dz
  }|dk    rt          d|          D ]}|dz  }||z   S )Nr*   r    )rY   rf   )r:   messagesizeresmessage_lengthmissing_spacerl   s          r;   rW   ztestMainClass.add_padding   sZ    W~-111m,,  s
}r=   c                   K   d|v r| j         dk    r
d|j        d<   d|v r| j         dk    rdS |                     ||          }|dk    }|dk    }|| j        k    }|d	k    }	|s|| j        v r|sdS d }
||j        v o|j        |         }|s6t          | j                  d
k    r|                    || j                  sd}
n.|s	|s|s|	sd}
n#t          |t                    rd}
n|| j        vrd}
|r|                    d           d {V  |j        }|
r.| j        r%t          |                     |
d          ||           dS | j        rAd|                    |          z   dz   }t          |                     dd          |||           t%                      rt'          | j        ||||           nt)          | j        ||||           d {V  | j        r%t          |                     dd          ||           |r
d| j        |<   dS )N	OrderBookcsFchecksumphpTrq   fetchCurrenciesfeaturesr   z[INFO] IGNORED_TESTz[INFO] UNSUPPORTED_TESTz[INFO] SKIPPED_TESTz[INFO] UNIMPLEMENTED_TESTrR   ()z[INFO] TESTINGz[INFO] TESTING DONE)r9   options	get_skipsproxy_test_file_namer   rr   rY   rh   in_arrayr   strr[   load_marketsrw   r0   r   rW   jsonr   r   r   )r:   ro   rJ   args	is_publicskipped_properties_for_methodis_load_marketsis_fetch_currenciesis_proxy_testis_feature_testskip_messagesupported_by_exchangenameargs_stringifieds                 r;   test_methodztestMainClass.test_method   s     +%%$(d*:*:+0HZ(+%%$(e*;*;4(,x(M(M%&-7*.??$(AA&*4 	kT-FFFPcF4!,!< [(,{B[ 	7C(@$A$AA$E$EhN_N_`kmq  nF  OG  OG$E0LL  	7)> 	7} 	7]l 	74LL5s;; 	70LL006L 	.''---------{ 	y LT%%lB77{KKK49 	^"X]]4%8%883>!!"2B77{L\]]]99 	kT_k8Ebdhiiiido{HFceijjjjjjjjj9 	Q!!"7<<dKPPP 	:59D%k2tr=   c                 n   i }||dz   | j         z   g}t          dt          |                    D ]c}||         }|| j        v rPt	          | j        |         t
                    r| j        |         c S |                    || j        |                   }dg dg dg dg dddgg d	d
dgd}t          |                                          }t          dt          |                    D ]}||         }	||	         }
|	                    ||
          rj|	| j        v r/t	          | j        |	         t
                    r| j        |	         c S |
                    | j        |	i           }|                    ||          }d|v rd|vr|d         |d<   d|v rd|vr|d         |d<   d|v rd|vr|d         |d<   |S )N.r   )fetchOrderBookfetchOrderBooksfetchL2OrderBookwatchOrderBookwatchOrderBookForSymbols)fetchTickerfetchTickerswatchTickerwatchTickers)fetchTradeswatchTradeswatchTradesForSymbols)
fetchOHLCV
watchOHLCVwatchOHLCVForSymbolsfetchLedgerfetchLedgerEntry)fetchDepositsWithdrawalsfetchDepositsfetchWithdrawalsfetchDepositWithdrawFeefetchDepositWithdrawFees)	orderBooktickertradeohlcvledgerdepositWithdrawdepositWithdrawFee	timestampdatetimebidask
baseVolumequoteVolume)r9   rf   rY   r   r   r   r   rZ   r\   r   	safe_dict)r:   rJ   ro   final_skipsmethod_namesrl   m_nameobject_skipsobject_namesobject_nameobject_methodsextra_skipss               r;   r   ztestMainClass.get_skips   sC   #[3%6%ABq#l++,, 	b 	bA!!_F---d26:C@@ b/7777"*"6"6{DDXY_D`"a"aK A  A  ATTTLLLIII$&89```#<>X"Y
 
 L--//00q#l++,, 	M 	MA&q/K)+6N  n== M4#777jI]^iIjlo>p>p7/<<<<&001E{TVWW&22;LL ;&&{1J1J&1+&>K
#[  5K+?+?!,U!3KK''-;2N2N)4\)BK&r=   c                 `  K   d}|                     |          }t          d|          D ]}	 |                     ||||           d {V   dS # t          $ r}t	          |          }	|dk    }
t          |	t                    }t          |	t                    }t          |	t                    }|r||dz
  k    r}t          |	t                    }t          |	t                    }d }d }|
r
d}|rd}nd}n|r|sd}d}nd}d}|rdnd}t          |d	d
|j        ||t          |	                     |cY d }~c S |                    |dz   dz             d {V  n|
r-t          ddt          |	          |j        ||           Y d }~ dS |r3| j        r%t          dt          |	          |j        ||           Y d }~ dS |r6|r4| j        r&t          ddt          |	          |j        ||           Y d }~ dS t          dt          |	          |j        ||           Y d }~ dS Y d }~d }~ww xY wdS )N   r   Trq   rd   Fr?   [TEST_WARNING]zHMethod could not be tested due to a repeated Network/Availability issuesz |   zExchange can not load marketsz[INFO] NOT_SUPPORTED[INFO]z(Authentication problem for public method)r   rf   r   rA   r   r   r   r   r   r   r   r   rw   r   sleepr0   )r:   ro   rJ   r   r   max_retriesr   rl   exrE   r   is_auth_erroris_not_supportedis_operation_failedis_on_maintenanceis_exchange_not_availableshould_failret_success	fail_types                      r;   	test_safeztestMainClass.test_safe  s_      #==..q+&& >	% >	%A=%&&{HdINNNNNNNNNtt :% :% :%&r**#.-#?!+A/B!C!C$.q,$?$? '1!_'E'E#& 4%K!O++-7=-I-I)5?CW5X5X1&*&** 3*/K0 3.3.2  9 3AR 3.2.3 /4.28C$Y$4$4IY	Y(rty  |D  |G  IT  Vf  hy  z{  h|  h|  }  }  }********* 'nna!et^<<<<<<<<<< ' %-/NPabcPdPdfnfqs~  AQ  R  R  R$uuuuuu ( $9 { !79J19M9Mx{\giyzzz#tttttt  %] %9 Y +UWhijWkWkmumx  {F  HX  Y  Y  Y#tttttt-/@/C/CX[R]_oppp$uuuuuu) =<<<<M:%v ts7   AH+CH&.H+6A
H&.H&<1H&4%H&&H+c                 X  K   g g |g|g|g|g|g|gg g g g d}| j         r|g|g|g|g|g|g|gg|g|ggd	}|                    |          }|d         }| j         s,|rg |d<   n$|g|d<   |g|d<   |g|d<   |g|d<   |g|d	<   |g|d
<   || _        |                     ||d           d {V  dS )N)r   r   r   r   fetchLastPricesr   r   r   r   fetchBidsAsksfetchStatus	fetchTime)	r   r   r   r   watchBidsAsksr   r   r   r   spotr   fetchFundingRatesfetchFundingRatefetchFundingRateHistoryfetchIndexOHLCVfetchMarkOHLCVfetchPremiumIndexOHLCVT)r7   marketpublic_tests	run_tests)r:   rJ   rK   testsr  is_spots         r;   run_public_testsztestMainClass.run_public_tests^  sJ     !"8#H &x!("8%h!
 
 = 	%h)/ &x!'"(#)(.4XJ &x+1(
 
E ((.} 		; ;+-'((.4X)*-3H()4:8/0,28'(+1(&'39(./!nnXud333333333tr=   c           	        K   t          |                                          }g }t          dt          |                    D ]=}||         }||         }|                    |                     ||||                     >t          j        |  d {V }	g }
t          dt          |                    D ])}||         }|	|         }|s|
                    |           *|rdnd}t          |
          r/d                    |
          }t          d|j
        |d|z              | j        r1t          |                     d|z   dz   |j
        z   d	                     d
S )Nr   PUBLIC_TESTSPRIVATE_TESTSz, r?   zFailed methods : z[INFO] END r   rR   T)rZ   r\   rf   rY   ri   r  asynciogatherjoinr   rw   r0   rW   )r:   rJ   r  is_public_test
test_namespromisesrl   	test_name	test_argsresultsfailed_methodstest_returned_valuetest_prefix_stringerrors_strings                 r;   r  ztestMainClass.run_tests  s     %**,,''
q#j//** 	\ 	\A"1Ii(IOODNN9h	>ZZ[[[[  1111111q#j//** 	1 	1A"1I")!*& 1%%i000/=R^^?~ 	i IIn55M!8;0BDWZgDghhh9 	_!!-2D"Ds"JX["XZ\]]^^^tr=   c                    K   |                      d|g d           d {V }|sdS t          |j                  }t          d|d           dS )Nrq   TFz[INFO:MAIN] Exchange loadedsymbols)r  rY   r)  r   )r:   rJ   resultexchange_symbols_lengths       r;   load_exchangeztestMainClass.load_exchange  sf      ~~mXr4HHHHHHHH 	5"%h&6"7"7*,CYOOOtr=   c                 T   d }|                     | j        d          }|                     | j        d          }|r|r|S |s|r|S t          dt          |                    D ]E}||         }|                    |j        |          }	|	|                    |	d          }
|
s|
|} nF|S )NpreferredSpotSymbolpreferredSwapSymbolr   active)r   r   rf   rY   r   markets)r:   rJ   r  r)  rK   preferred_spot_symbolpreferred_swap_symbolrl   sr  r0  s              r;   get_test_symbolztestMainClass.get_test_symbol  s     ( 4 4T5WYn o o ( 4 4T5WYn o o 	), 	)(( 	)2 	)((q#g,,'' 	 	A
A(()91==F!!,,VX>> fnFEr=   Nc                     |g d}|d         }t          dt          |                    D ]}||         |j        v r
||         c S |S )N)	BTCETHXRPLTCBCHEOSBNBBSVUSDTr   )rf   rY   
currencies)r:   rJ   codescoderl   s        r;   get_exchange_codeztestMainClass.get_exchange_code  sc    =TTTEQxq#e**%% 	  	 AQx8...Qx /r=   Tc                    i }|j         }t          |                                          }t          dt	          |                    D ]=}||         }||         }|r|d         r|||d         <   (|s|d         s|||d         <   >|S )Nr   r  rK   )r1  rZ   r\   rf   rY   )	r:   rJ   r  r   r1  r\   rl   r   r  s	            r;   get_markets_from_exchangez'testMainClass.get_markets_from_exchange  s    "GLLNN##q#d))$$ 	/ 	/Aq'CS\F /v /(.F8$%% /&. /(.F8$%
r=   c                 B   |                      ||          }g d}g d}g d}|r|n|}|                     |||          }|t          dt          |                    D ]}	||	         }
|                    |d|
          }|                    |d          }t          |                                          }t          |          }|r|                     |||          } n|q|                    |dd          }g }t          dt          |                    D ]#}	|                    ||	         d                    $|                     |||          }|Ht          |	                                          }t          |          }|dk    r|d         }||d         }|S )	N)r7  r8  r9  r:  r=  DASHDOGEETCTRXr?  USDCUSDGUSDEURTUSDCNYJPYBRL)BTC/USDTBTC/USDCzBTC/USDzBTC/CNYzBTC/EURzBTC/AUDzBTC/BRLzBTC/JPYzETH/USDTETH/USDCzETH/USDzETH/CNYzETH/EURzETH/AUDzETH/BRLzETH/JPYzEUR/USDTzEUR/USDzEUR/USDCzUSDT/EURzUSD/EURzUSDC/EURzBTC/ETHzETH/BTC)BTC/USDT:USDTBTC/USDC:USDCzBTC/USD:USDzETH/USDT:USDTzETH/USDC:USDCzETH/USD:USDBTC/USD:BTCzETH/USD:ETHr   baserK   r0  T)
rE  r5  rf   rY   	filter_byindex_byrZ   r\   ri   values)r:   rJ   r  current_type_marketsrA  spot_symbolsswap_symbolstarget_symbolsrK   rl   current_codemarkets_array_for_current_codeindexed_mktssymbols_array_for_current_codesymbols_lengthactive_marketsactive_symbolsr\  values_lengthfirsts                       r;   get_valid_symbolztestMainClass.get_valid_symbol  s   #==hMM U  U  U h  h  h X  X  X)-?<%%hnEE>1c%jj))  $Qx191C1CDXZ`bn1o1o.'001OQYZZ15l6G6G6I6I1J1J.!$%C!D!D! !11(DB`aaFE >%//0DhPTUUNN1c.1122 C C%%nQ&7&ABBBB))(D.IIF>.557788FKKMq  q	$"8_Fr=   c                 Z  K   d }d }|#|                     |          }|d         r|}nI|}nF|j        d         r|                     |d          }|j        d         r|                     |d          }|t          d|           |t          d|           | j        s|j        d         r>|<| j        rt          d           d|j        d<   |                     ||           d {V  |j        d         r>|<| j        rt          d	           d|j        d<   |                     ||           d {V  | j        s| j        rj|j        d         r(|&d|j        d<   | 	                    ||           d {V  |j        d         r(|&d|j        d<   | 	                    ||           d {V  dS )
Nr  TswapFz![INFO:MAIN] Selected SPOT SYMBOL:z![INFO:MAIN] Selected SWAP SYMBOL:z[INFO] ### SPOT TESTS ###defaultTypez[INFO] ### SWAP TESTS ###)
r  rr   rj  r   r4   r0   r   r  r3   run_private_tests)r:   rJ   provided_symbolspot_symbolswap_symbolr  s         r;   test_exchangeztestMainClass.test_exchange  s;     &___55Ff~ .--|F# D"33HdCC|F# E"33HeDD"4kBBB"4kBBB% 	C|F# C(?9 6455528 /++HkBBBBBBBBB|F# C(?9 6455528 /++HkBBBBBBBBB 	D 6 	D|F# D(?28 /,,X{CCCCCCCCC|F# D(?28 /,,X{CCCCCCCCCtr=   c                 x  K   |                     d          st          dd           dS |                     |          }i dg dg dg dg d	g d
g d|gd|gd|gd|gd|ggd|gd|gd|gd|gd||gd|g|g|g|g|g|g|g|g|g|g|gd
}t          d          r|g|d<   | j        r|g|g|g|g|gd}|                    |          }|d         }| j        s8|rg |d<   n0|g|d<   |g|d<   |g|d<   |g|d<   |g|d <   |g|d!<   |g|d"<   |g|d#<   |                     ||d           d {V  d S )$NFz[INFO] Skipping private testszKeys not foundTsignInfetchBalancefetchAccountsfetchTransactionFeesfetchTradingFeesr  fetchOrdersfetchOpenOrdersfetchClosedOrdersfetchMyTradesfetchLeverageTiersr   fetchTransactionsr   r   fetchBorrowInterestcancelAllOrders)
fetchCanceledOrdersfetchMarginModesfetchPositionfetchDepositcreateDepositAddressfetchDepositAddressfetchDepositAddressesfetchDepositAddressesByNetworkfetchBorrowRateHistoryr   z--fundedTestscreateOrder)watchBalancewatchMyTradeswatchOrderswatchPositionwatchPositionsr  r   fetchPositionsr  fetchPositionRisksetPositionModesetMarginModefetchOpenInterestHistoryr  fetchFundingHistory)check_required_credentialsr   rC  r	   r7   r  r  )r:   rJ   rK   rB  r  r  r  s          r;   rn  ztestMainClass.run_private_tests  s     22599 	02BCCC4%%h//
b
B
 R
 #B	

 
 2
 F8
 x
  &
 fX
 !F8*
 D6
  $
 dV
 
  "D&>!
" x#
$ %+8!'$X!F%)F$(6&*V/3f'+f!%7
 
 
: _-- 	,$*8E- = 	!%"( &x"(#)( E ((.} 	8 8+-'(( ,2(&'*0o&.4X)*,28'(*0o&5;H014:8/006x+,nnXue44444444444r=   c                   K   | j         }| j        dk    rt                      rdS d}d }t          d|          D ]Z}	 |                     ||g d           d {V   dS # t
          $ r*}|}|                    |dz             d {V  Y d }~Sd }~ww xY w|*d|z   dz   t          |          z   }t          d|z              dS )	NpyTr   r   r   z[TEST_FAILURE] Failed z : r   )	r   r9   r   rf   r   rA   r   r   r   )r:   rJ   proxy_test_namer   	exceptionrn   rE   error_messages           r;   test_proxiesztestMainClass.test_proxies_  s      38t		4	q+&& 	/ 	/A/&&"dKKKKKKKKKtt / / /	nnQX............../  4FNQbclQmQmmM !M1222ts   A
B' BBc                     |j         dk    r|j        |j        dk    s
J d            |j        d         d         dk    sJ d|j        d         d         z               d|j        d	         d
         v s+J dt	          |j        d	         d
                   z               d S |j         dk    rR|j        dk    sJ d|j        z               |j        d         d         dk    s J d|j        d         d         z               d S d S )Nbinancer*   z$binance.com hostname should be emptyapipubliczhttps://api.binance.com/api/v3z/https://api.binance.com/api/v3 does not match: zlending/union/accountsapigetz8SAPI should contain the endpoint lending/union/account, 	binanceusz
binance.usz#binance.us hostname does not match zhttps://api.binance.us/api/v3z.https://api.binance.us/api/v3 does not match: )rw   hostnameurlsr  r   )r:   rJ   s     r;   check_constructorztestMainClass.check_constructorw  s   ;)##$,0AR0G0G0GIo0G0G0G='15UUUU  XI  LT  LY  Z_  L`  ai  Lj  XjUUU+x|F/CE/JJJJ  NH  KY  Zb  Zf  gm  Zn  ot  Zu  Kv  Kv  NvJJJJJ[K''$4446[^f^o6o444='15TTTT  WG  JR  JW  X]  J^  _g  Jh  WhTTT ('TTr=   c                   K   |j         dk    rdS d|_        |                    d           d {V }|d         }|d         }t          |                                          }t          |          dk    s
J d            t          |                                          }t          |          dk    s
J d	            d|_        dS )
Nr  FTrS  r0   responseHeadersr   z$Response headers should not be emptyz+Response headers values should not be empty)rw   return_response_headersfetch_tickerrZ   r\   rY   r\  )r:   rJ   r   r0   headersheaders_keysheader_valuess          r;   test_return_response_headersz*testMainClass.test_return_response_headers  s      ;)##5+/(,,Z88888888f~()GLLNN++<  1$$$&L$$$W^^--..=!!A%%%'T%%%+0(tr=   c                   K   |j         rdS |                     |           | j        st          |d          r|                    d           	 |                     |           d {V }|s%t                      st          |           d {V  dS |                     ||           d {V  t                      st          |           d {V  d S d S # t          $ r*}t                      st          |           d {V  |d }~ww xY w)NTr5   )
rV   r  r5   r   set_sandbox_moder,  r   r!   rr  rA   )r:   rJ   rK   r*  rE   s        r;   r_   ztestMainClass.start_test  sl     > 	4x(((< 	,,XyAA 	,%%d+++	--h77777777F yy *//)))))))t
 $$Xv66666666699 &Hoo%%%%%%%%%& & 	 	 	99 &Hoo%%%%%%%G	s   A C ?C 
D%DDc                     t          |          }t          |          }|}|d|z   dz   }|d|z   dz   |z   z  }|s
J |            d S )N[]z computed: z	 stored: )r   )	r:   condr   calculated_outputstored_outputr   calculated_stringstored_stringr  s	            r;   assert_static_errorz!testMainClass.assert_static_error  sk     ++<==&}55?#IOM6DGXXX""]"""""r=   c                 R    t                      dz   |z   dz   }t          |          }|S )Nz./ts/src/test/static/markets/.jsonr
   r   r:   rw   filenamecontents       r;   load_markets_from_filez$testMainClass.load_markets_from_file  s/    
  >>$CCbH7Rx((r=   c                 R    t                      dz   |z   dz   }t          |          }|S )Nz ./ts/src/test/static/currencies/r  r  r  s       r;   load_currencies_from_filez'testMainClass.load_currencies_from_file  s-    >>$FFKgUx((r=   c                 T   i }|r?||z   dz   }t          |          st          d|z              d S t          |          ||<   |S t          |          }t	          dt          |                    D ]7}||         }|                    dd          }t          ||z             }	|	||<   8|S )Nr  z[WARN] tests not found: r   r*   )r   r   r   r   rf   rY   rg   )
r:   foldertarget_exchanger*  pathfilesrl   fileexchange_namer  s
             r;   load_static_dataztestMainClass.load_static_data  s     	O+g5D!$'' /$6777t&24&8&8F?#MF##q#e**%% 	, 	,A8D LL"55M"6D=11G$+F=!!r=   c                 ,   |d S |                     d          }d}t          dt          |                    D ]Z}|dk    rR||         }|                    d          dk    r'|                     d          }|dz  }||d         z  } n|dz  }||z  }[|S )N/r*   r      ?)re   rf   rY   find)r:   url	url_partsr   rl   currentcurrent_partss          r;   remove_hostnamefrom_urlz%testMainClass.remove_hostnamefrom_url  s    ;4IIcNN	q#i..)) 
	 
	A1uu#A,<<$$r))$+MM#$6$6M3JC=++CEs
w
r=   c                 z   i }|                     d          }t          dt          |                    D ]}||         }|                     d          }t          |          }|dk    r5|d         }|d         }	|	9|	                    d          s|	                    d          rt	          |	          }	|	||<   |S )N&r   =r  rd   r  {)re   rf   rY   
startswithr   )
r:   r  r*  partsrl   part	key_valuekeys_lengthr   values
             r;   urlencoded_to_dictz testMainClass.urlencoded_to_dict  s    		#q#e**%% 	  	 A8D

3Ii..KaA,CaLE!)9)9#)>)>!EDTDTUXDYDY!"5))F3KKr=   c           	      
   t          |          rt          |          rdS |s|sdS t          |t                    r]t          |t                    rH|                    d          r3|                    d          rt	          |          }t	          |          }t          |t
                    r.t          |t
                    rt          |                                          }t          |                                          }t          |          }	t          |          }
| 	                    |	|
k    d||           t          dt          |                    D ]|}||         }|                    ||          r!|                    ||          s| 	                    dd|z   ||           ||         }||         }|                     ||||||           }nt          |t                    rt          |t                    rt          |          }t          |          }| 	                    ||k    d||           t          dt          |                    D ]+}||         }||         }|                     |||||           ,nt          |          rd n|}t          |          rd n|}|rt          |          nd}|rt          |          nd}d|z   d	z   |z   }|r*| j        d
k    r| 	                    ||k    ||||           nQt          |t                    }t          |t                    }t          |t                    }t          |t                    }|d u }|d u }||k    o||k    o||k    }| 	                    |d|||           |p|}|p|} |p|}!|s| s|!r| j        d
k    s| j        dk    rd}"	 |                    |           d}"n# t           $ r}#d}"Y d }#~#nd }#~#ww xY w|"rE| 	                    |                    |          |                    |          k    ||||           dS | 	                    t#          |          t#          |          k    ||||           dS | 	                    t#          |          t#          |          k    ||||           dS | j        d
k    rb|                    |          }$|                    |          }%| 	                    t          |$          t          |%          k    ||||           nG|                    |          }&|                    |          }'| 	                    |&|'k    ||||           dS )NTr  zoutput length mismatchr   Fzoutput key missing: 	undefinedzoutput value mismatch: != C#zoutput type mismatchGO)r    r   r   r  r   r   rZ   r\   rY   r  rf   r   assert_new_and_stored_outputr8   boolparse_to_numericrA   r   number_to_string)(r:   rJ   	skip_keys
new_outputr  strict_type_checkasserting_keystored_output_keysnew_output_keysstored_keys_lengthnew_keys_lengthrl   r   stored_value	new_valuestored_array_lengthnew_array_lengthstored_itemnew_itemsanitized_new_outputsanitized_stored_outputnew_output_stringstored_output_stringmessage_erroris_computed_boolis_stored_boolis_computed_stringis_stored_stringis_computed_undefinedis_stored_undefinedshould_be_same
is_boolean	is_stringis_undefined	is_numberrE   stringified_new_outputstringified_stored_outputnumeric_new_outputnumeric_stored_outputs(                                           r;   "assert_new_and_stored_output_innerz0testMainClass.assert_new_and_stored_output_inner  s,   $$ 	})E)E 	4 	- 	4}c** 	0J1L1L 	0R_RjRjknRoRo 	0t~  uJ  uJ  KN  uO  uO 	0&}55M#J//J}d++ J	W*Z2N2N J	W!%m&8&8&:&:!;!;":??#4#455O!$%7!8!8!/22O$$%7?%JLdfsu  A  A  A1c"45566 x x(+$$S)44  ))#?? m,,U4JS4PR_aklll,S1&sO	11(IyR^`qsvwwwwx t,, :	W*Z2N2N :	W"%m"4"4":$$%8<L%LNfhu  xB  C  C  C1c-0011 q q+A.%a=11(IxQ\^oppppq -:*,E,E#V44J /<]/K/K&_ddR_#=Q b$8 9 9 9WbCZ#k3'>#?#?#?`k 47HH6QThhM  +Wdi4&7&7 (()=AX)XZgiv  yC  ER  S  S  S  S$./CT$J$J ",-Dd"K"K&01Es&K&K"$./F$L$L )=)E%'>$'F#"2n"D  "fK]aqKq  "f  yN  Re  ye((9OQ^`jlyzzz-?
.B2B	4K8K W Wl W	T))tyD/@/@$)	.$556JKKK(,II( . . .(-IIIIII. % ( 44X5N5NOc5d5dhp  iB  iB  CZ  i[  i[  6[  ]j  ly  {E  GT  U  U  U#'4 44]CT5U5UYfg{Y|Y|5|  L  N[  ]g  iv  w  w  w#'400?P1Q1QUbcwUxUx1x  {H  JW  Yc  er  s  s  s#tyD((191J1JK_1`1`.4<4M4MNe4f4f1005K1L1LPSTmPnPn1np}  @M  OY  [h  i  i  i  i-5-F-FGX-Y-Y*080I0IJ^0_0_-001CG\1\^kmz  }G  IV  W  W  Wts   O 
O0$O++O0c                    d}	 |                      ||||||          }na# t          $ rT}| j        rF|                     |          dz   dz   |                     |          z   dz   }	t	          d|	z              |d }~ww xY w|S )NTz(calculated)r  z(stored)z[TEST_FAILURE_DETAIL])r  rA   r0   var_to_stringr   )
r:   rJ   r  r  r  r  r  r   rE   r  s
             r;   r  z*testMainClass.assert_new_and_stored_outputN  s    	99(Iz[hj{  ~K  L  LCC 	 	 	y > $ 2 2: > > ORX X[_[m[mn{[|[| |  @J  !J,}<===G		
 
s    
A=AA88A=c                 V    d }|d}n!t          |          rd}nt          |          }|S )Nr  null)r    r   )r:   obj
new_strings      r;   r  ztestMainClass.var_to_stringY  s=    
;$JJ3 	-JJ',,Jr=   c                     ||k    rF|                      |          }|                      |          }	|                     ||	k    d||	           |||||                    d          }
|                    d          }|                    |
d          }|                    |d          }||dS |                     |          }|                     |          }|                     ||||           dS |dk    rM|K|It          |t                    rt          |          }t          |t                    rt          |          }n|dk    r/|-|+|                     |          }|                     |          }ny|dk    rs|	                    d          s|	                    d	          rt          |          }t          |          }n*|                     |          }|                     |          }|                     ||||           dS )
Nzurl mismatchr  rd   Tr   
urlencodedbothr  r  )
r  r  re   r   r  r  r   r   r   r  )r:   rJ   typer  
stored_urlrequest_urlr  r  
first_pathsecond_pathstored_url_partsnew_url_partsstored_url_querynew_url_querystored_url_paramsnew_url_paramss                   r;   assert_static_request_outputz*testMainClass.assert_static_request_outputc  s?   $$55jAAJ66{CCK$$Z;%>PZ\ghhh !
(:&[-D#-#3#3C#8#8  + 1 1# 6 6#+#6#67G#K#K  ( 3 3M1 E E$,=3H  4$($;$;<L$M$M!!%!8!8!G!G11(I~Whiiit6>>}8z?U--- : *= 9 9*c** 4'
33
\!!}'@zG] 33MBBM00<<JJV^^'',, A0H0H0M0M A *= 9 9'
33

 $ 7 7 F F!44Z@@
))(Iz=YYYtr=   c                 8    |                      ||||d           d S )NF)r  )r:   rJ   r  computed_resultstored_results        r;   assert_static_response_outputz+testMainClass.assert_static_response_output  s&    ))(IP]_deeeeer=   c                     |d S g }t          dt          |                    D ]D}||         }t          |          r|                    d            /|                    |           E|S )Nr   )rf   rY   r    ri   )r:   input	new_inputrl   r  s        r;   sanitize_data_inputz!testMainClass.sanitize_data_input  s}    =4	q#e**%% 	* 	*AAhGW%% *  &&&&  ))))r=   c           	        K   d }d }| j         rt          d|d|d                    	 t                      s1t          |||                     |d                              d {V  n*t          |||                     |d                              n<# t          $ r/}t          |t                    s||j	        }|j
        }Y d }~nd }~ww xY w	 |                    |d          }	|                     ||||d         ||	|           ns# t          $ rf}d| _        d| j        z   d	z   dz   |j        z   d
z   dz   |z   d
z   dz   |d         z   d
z   t!          |          z   }
t          d|
z              Y d }~nd }~ww xY wdS )Nz[INFO] STATIC REQUEST TEST::descriptionr'  outputr  Tr  ][STATIC_REQUEST]r  r?   )r0   r   r   r   r)  r   rA   r   r   last_request_bodylast_request_urlr   r!  request_tests_failedr8   rw   r   )r:   rJ   rL   datar  r  r-  r  rE   call_outputr  s              r;   test_request_staticallyz%testMainClass.test_request_statically  s     9 	R.T-=PQQQ		499 q6xIaIabfgnboIpIpqqqqqqqqqq5hH`H`aefmanHoHoppp 	4 	4 	4q"677 /F"3KKKKKK		4
	3"--dH==K--hieVacnpvwwww 	3 	3 	3(,D%$)O.AACG(+UX[[^aadjjmppsvvy}  L  zM  M  PS  S  Vg  hi  Vj  Vj  jM!M122222222	3 ts1   A)B 
C
%CC
7D 
E6AE11E6c                   K   |                     |d          }t          ||d                   }| j        rt          d|d|d                    	 t	                      sIt          |||                     |d                              d {V }|                     ||||           nBt          |||                     |d                             }|                     ||||           ns# t          $ rf}	d| _
        d| j        z   d	z   dz   |j        z   d
z   dz   |z   d
z   dz   |d         z   d
z   t          |	          z   }
t          d|
z              Y d }	~	nd }	~	ww xY wt          |d            dS )NparsedResponsehttpResponsez[INFO] STATIC RESPONSE TEST:r+  r,  r'  Tr  z][STATIC_RESPONSE]r  r?   )r   r   r0   r   r   r   r)  r%  r   rA   response_tests_failedr8   rw   r   )r:   rJ   rL   r  r2  expected_resultmocked_exchangeunified_resultunified_result_syncrE   r  s              r;   test_response_staticallyz&testMainClass.test_response_statically  s!     "--d4DEE,XtN7KLL9 	S/d=>QRRR
	399 u'GRXZ^ZrZrswx  tA  [B  [B  (C  (C  "C  "C  "C  "C  "C  "C22?I~_noooo&KHV\^b^v^vw{  }D  xE  _F  _F  'G  'G#22?IObdsttt 	3 	3 	3)-D&$)O.BBSH8;VY\\_bbekknqqtwwz~  @M  {N  N  QT  T  Wh  ij  Wk  Wk  kM!M122222222	3 	8T***ts   BC) )
E3AEEc           
      .   |                      |          }|                     |          }d }d }t                      dz   }|dk    rc| j        dk    rt                      dz   }|dz   }nAt	                      r|dz   }n-t                      rt                      r|dz   }n|dz   }n|d	z   }i d
|d|dddddddddddddddddddddddddd d!d"d#d$d"d%d$gd&d'ddd(i ||d)}|d*k    r
d+|d<   d+|d<   t          ||          }||_        |S ),Nzts/src/test/static/binaries/lighterJSz&/src/test/static/binaries/wasm_exec.jszlighter.wasmz lighter-signer-windows-amd64.dllzlighter-signer-linux-amd64.sozlighter-signer-linux-arm64.soz!lighter-signer-darwin-arm64.dylibr1  r@  rP   F	rateLimitrd   r   zhttp://fake:8080r   apiKeyr   secretsecretsecretpasswordwalletAddresswallet
privateKeyB0xff3bdd43534543d421f05aec535965b5050ad6ac15345435345435453495e771uidtokenlogin	accountId12345accounts	myAccountr?  )rw   rB  rK  r   Tl   I5 )enableUnifiedAccountenableUnifiedMarginaccessTokenexpiresleverageBracketslibraryPathwasmExecPathgrvtr*   )	r  r  r
   r8   r%   r&   r'   r   r@  )	r:   r  r1  r@  wasm_exec_pathlibrary_path	base_pathr   rJ   s	            r;   init_offline_exchangez#testMainClass.init_offline_exchange  s#   --m<<33MBB
 !NN%CC	I%%yD  !-2Z!Z(>9<< 	S#,/Q#QLLZZ Szz S'03R'R'03R'R $-/R#RL 
w 
* 
 u 
 	 

 + 
 , 
 e 
 n 
 
 
 X 
 ^ 
 5 
 W 
 W 
  
  
   ! 
. (,',&*$&+ . / 
B F"" "GH "GH 88(r=   c           	        K   |                      |          }|                    |di           }|                    |d          }|                    |          st	          |          |_        |                    |d          }|                    |          st	          |          |_        |                    |d          }|                    |          st	          |          |_        |                    |d          }	|                    |	          st	          |	          |_        |	                    |d          }
|
r|
|_
        |                    |           |                    |di           }t          |                                          }t          dt!          |                    D ]}||         }||         }t          dt!          |                    D ]m}||         }|j        }|                    |di           }|                    |                    ||                     |                    |d	          }|||k    rq|                    |d
d          }|r|                    |d
d          }|dk    r|                    |dd          }|r| j        dk    r|                    |dd          }|r| j        dk    r|                    |d          }|                    |dg           }|                     |||||           d {V  |                    |                    |i                     |_        ot/                      st1          |           d {V  dS )Nr   rB  rC  rH  rF  rO  methodsr   r,  disabledFr*   
disabledCSr  
disabledGOr  
outputTypeskipKeysT)r\  r   r   is_empty_stringr   rB  rC  rH  rF  	safe_listrO  extend_exchange_optionsr   rZ   r\   rf   rY   r   r   	safe_boolr8   r4  convert_to_safe_dictionaryr   r!   )r:   r  exchange_datar!  rJ   global_optionsapi_keyrC  private_keywallet_addressrO  r^  methods_namesrl   rL   r#  rn   r*  old_exchange_optionstest_exchange_optionsr,  is_disableddisabled_stringis_disabled_c_sharpis_disabled_gor  r  s                              r;    test_exchange_request_staticallyz.testMainClass.test_exchange_request_statically	  s     --m<<!++M9bII&&}h??''00 	+!'llHO%%mX>>''// 	*!&kkHO**=,GG''44 	3"%k"2"2H!--m_MM''77 	9%(%8%8H"%%mZ@@ 	) (H((888%%mYCCW\\^^,,q#m,,-- 	w 	wA"1%FfoG1c'll++ w w '/'7$(0(;(;FIr(R(R%001E1EFZ\q1r1rsss&11&-HH)	[0H0H&00UKK "*"6"6vz2"N"N"b((&.&8&8u&U&U#& DI,=,=!)!3!3FL%!P!P! tyD'8'8++M<HH$//z2NN	228VVTS\]]]]]]]]]#+#F#FxG[G[\prtGuGu#v#v  3w4 yy 	"//!!!!!!!tr=   c                   K   |                      |          }|                    |d          }|                    |          st          |          |_        |                    |d          }|                    |          st          |          |_        |                    |d          }|                    |          st          |          |_        |                    |d          }|                    |          st          |          |_        |                    |di           }	|                    |di           }
|	                    |
           t          |	                                          }t          dt          |                    D ]}||         }|	|         }t          dt          |                    D ]X}||         }|                    |d          }|j        }|                    |di           }|	                    |                    ||                     |                    |d	d
          }|r|                    |dd
          }|r| j        dk    r|                    |dd
          }|r| j        dk    r|||k    r|                    |dd
          }|r| j        dk    r|                    |dg           }|                     ||||           d {V  |	                    |                    |i                      Zt'                      st)          |           d {V  dS )NrB  rC  rH  rF  r^  r   r   r,  r_  Fr`  r  disabledPHPPHPra  r  rc  T)r\  r   rd  r   rB  rC  rH  rF  r   rf  rZ   r\   rf   rY   r   r   rg  r8   r=  r   r!   )r:   r  ri  r!  rJ   rk  rC  rl  rm  r^  r   rn  rl   rL   r#  rn   r*  r,  ro  rp  rq  rs  is_disabled_phprt  r  s                            r;   !test_exchange_response_staticallyz/testMainClass.test_exchange_response_staticallyB  sx     --m<<&&}h??''00 	+!'llHO%%mX>>''// 	*!&kkHO**=,GG''44 	3"%k"2"2H!--m_MM''77 	9%(%8%8H"%%mYCC%%mYCC((111W\\^^,,q#m,,-- 	a 	aA"1%FfoG1c'll++ a a &11&-HH'/'7$(0(;(;FIr(R(R%001E1EFZ\q1r1rsss&00UKK &.&8&8u&U&U#& DI,=,="*"4"4V]E"R"R" 	U(:(:)	[0H0H!)!3!3FL%!P!P! tyD'8'8$//z2NN	33HfiQWXXXXXXXXX 001E1EFZ\^1_1_````3a4 yy 	"//!!!!!!!tr=   c                    |dS d}|d         }t          |                                          }t          dt          |                    D ]7}||         }||         }	t          |	          }
|                    ||
          }8|S )Nrd   r   r^  )rZ   r\   rf   rY   sum)r:   rJ   ri  r!  r|  r^  rn  rl   rL   r#  results_lengths              r;   !get_number_of_tests_from_exchangez/testMainClass.get_number_of_tests_from_exchangew  s     1	*W\\^^,,q#m,,-- 	4 	4A"1%FfoG \\N,,sN33CC
r=   c                    t          di           }|                    |dd          }|r"| j        dk    rt          d|z   dz              dS |                    |dd          }|r"| j        d	k    rt          d|z   d
z              dS |                    |dd          }|r"| j        dk    rt          d|z   dz              dS |                    |dd          }|r"| j        dk    rt          d|z   dz              dS dS )NExchange
disabledPyFPYz[TEST_WARNING] Exchange z is disabled in pythonTrw  rx  z is disabled in phpr`  r  z is disabled in c#ra  r  z is disabled in go)r   rg  r8   r   )r:   r  ri  rJ   is_disabled_pyry  rs  rt  s           r;   check_if_exchange_is_disabledz+testMainClass.check_if_exchange_is_disabled  s?    R00!++M<OO 	tyD00+m;>VVWWW4",,]M5QQ 		U 2 2+m;>SSTTT4&00eTT 	DI$5$5+m;>RRSSS4!++M<OO 	tyD00+m;>RRSSS4ur=   c                 D   K   |                      d||           d {V  dS )NrequestTrun_static_tests)r:   r  r!  s      r;   rS   z&testMainClass.run_static_request_tests  s5      ##I	JJJJJJJJJtr=   c                   K   t                      dz   |z   dz   }|                     ||          }|dS t          |                                          }t	          di           }g }d}	|rt          d|z              |rt          d|z              t          dt          |                    D ]}
||
         }||         }|                     ||          }|r+| 	                    |||          }|
                    |	|          }	|dk    r+|                    |                     |||                     |                    |                     |||                     	 t          j        |  d {V  n[# t           $ rN}|dk    rd| _        nd| _        d	| j        z   d
z   t)          |          z   }t          d|z              Y d }~nd }~ww xY w| j        s| j        rt+          d           d S t-                      rdnd}d	| j        z   dz   |z   dz   t/          |	          z   dz   |z   dz   }t          d|z              d S )Nz./ts/src/test/static/r  Tr  r   z[INFO:MAIN] Exchange to test: z[INFO:MAIN] Testing only: r  r  r.  r?   rd   z[SYNC]r*   r  z[TEST_SUCCESS] z static z tests passed.r   )r
   r  rZ   r\   r   r   rf   rY   r  r~  r|  ri   ru  rz  r  r  rA   r1  r8  r8   r   r   r   r   )r:   r  r  r!  r  static_data	exchangesrJ   r   r|  rl   r  ri  r_  number_of_testsrE   r  prefixsuccess_messages                      r;   r  ztestMainClass.run_static_tests  s     "99D@3F++FODD4))++,,	 R00 	E1OCDDD 	;-	9:::q#i..)) 	q 	qA%aLM'6M99-WWH "DDX}^ghhO,,sO44Cy   E EmUbdm n noooo F F}Vcen o opppp	3.(+++++++++ 	3 	3 	3y  ,0))-1*$)O.AADUVWDXDXXM!M122222222	3 $ 	-(B 	-NNNNN")))4XX"F!DIo3f<?PPSVWZS[S[[^hhkoo  sC  COO+,,,,,s   #E8 8
GAGGc                 D   K   |                      d||           d {V  dS )NresponseTr  )r:   r  tests      r;   rT   z'testMainClass.run_static_response_tests  s7       ##JtDDDDDDDDDtr=   c                   K   |                                  |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 | 	                                | 
                                |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 |                                 g}t9          j        |  d {V  d| j        z   dz   }t?          d|z              tA          d           dS )Nr  z&][TEST_SUCCESS] brokerId tests passed.r   r   T)!test_binancetest_okxtest_cryptocom
test_bybittest_kucointest_kucoinfuturestest_bitget	test_mexctest_htxtest_wootest_bitmarttest_coinex
test_bingxtest_phemextest_blofintest_coinbaseinternationaltest_coinbase_advancedtest_woofi_pro
test_oxfuntest_xttest_paradextest_hashkeytest_coincatchtest_cryptomustest_derivetest_mode_tradetest_backpacktest_toobitr  r  r8   r   r   )r:   r   r  s      r;   rU   z!testMainClass.run_broker_id_tests  s      %%''$:M:M:O:OQUQ`Q`QbQbdhdtdtdvdvx|  yP  yP  yR  yR  TX  Td  Td  Tf  Tf  hl  hv  hv  hx  hx  z~  zG  zG  zI  zI  KO  KX  KX  KZ  KZ  \`  \m  \m  \o  \o  qu  qA  qA  qC  qC  EI  ET  ET  EV  EV  X\  Xh  Xh  Xj  Xj  lp  l|  l|  l~  l~  @D  @_  @_  @a  @a  cg  c~  c~  c@  c@  BF  BU  BU  BW  BW  Y]  Yh  Yh  Yj  Yj  lp  lx  lx  lz  lz  |@  |M  |M  |O  |O  QU  Qb  Qb  Qd  Qd  fj  fy  fy  f{  f{  }A  }P  }P  }R  }R  TX  Td  Td  Tf  Tf  hl  h|  h|  h~  h~  @	D	  @	R	  @	R	  @	T	  @	T	  V	Z	  V	f	  V	f	  V	h	  V	h	  i	nh''''''''	/,TTX'(((Atr=   c           	        K   |                      d          }d}d}d}d }	 |                    ddddd	           d {V  n1# t          $ r$}|                     |j                  }Y d }~nd }~ww xY w|d
         }t          |          }|                    |          sJ d|z   dz   |z               d }		 |                    ddddd	           d {V  n1# t          $ r$}|                     |j                  }	Y d }~nd }~ww xY wd }
	 |                    ddddd	           d {V  n1# t          $ r$}|                     |j                  }
Y d }~nd }~ww xY w|	d
         }t          |          }|                    |          sJ d|z   dz   |z               |
d
         }|                    |          sJ d|z   dz   |z               d }	 |                    dddddddi           d {V  |                     |j                  }|d         d u}|s
J d            |d         }t          |          }|                    |          sJ d|z   dz   |z               n1# t          $ r$}|                     |j                  }Y d }~nd }~ww xY wd }	 dddddddddddg}|                    |           d {V  n1# t          $ r$}|                     |j                  }Y d }~nd }~ww xY w|d         }t          dt          |                    D ]:}||         }|d
         }|                    |          sJ d |z   dz   |z               ;t                      st          |           d {V  d!S )"Nr  z
x-TKT5PX2Fz
x-cvBPrNm9z
x-xcKtGhcurS  limitbuyrd    N  newClientOrderIdzbinance - spot clientOrderId: z does not start with spotIdrV  rX  zbinance - swap clientOrderId: z does not start with swapIdz%binance - swap clientOrderIdInverse: gMb`?ip triggerPricei algoOrderIdz[binance - swap clientOrderId needs to be sent as algoOrderId but algoOrderId is not definedclientAlgoIdselli )rK   r  sideamountpricer  )rK   r  r  r  batchOrdersr   z&binance createOrders - clientOrderId: T)r\  create_orderrA   r  r/  r   r  create_ordersrf   rY   r   r!   )r:   rJ   spot_idswap_idinverse_swap_idspot_order_requestrE   client_order_idspot_id_stringswap_order_requestswap_inverse_order_requestclient_order_id_swapswap_id_stringclient_order_id_inverseswap_algo_order_requestcheck_order_requestalgo_order_id_definedclient_algo_id_swapswap_algo_id_stringcreate_orders_requestordersbatch_ordersrl   r  current_client_order_ids                            r;   r  ztestMainClass.test_binance  s     --i88&!	U''
GUAuMMMMMMMMMM 	U 	U 	U!%!8!89S!T!T	U,-?@W)).99  	_  	_;[^m;m  qN  <N  Q_  <_  	_  	_  	_!	U''%ERRRRRRRRRR 	U 	U 	U!%!8!89S!T!T	U%)"	]''wq%PPPPPPPPPP 	] 	] 	])-)@)@A[)\)\&&&&&&	]  22DEW#..~>>  	i  	i@`cw@w  {X  AX  [i  Ai  	i  	i  	i"<=O"P&11/BB  	x  	xDk  oF  EF  If  Ef  ix  Ex  	x  	x  	x"&	Z''%PVY          #'"9"9(:T"U"U%8%Gt%S!(  H  H  +H  H  H  H"9."I"%g,,&112EFF  u  uHhk~H~  B_  I_  bu  Iu  u  u  u  u 	Z 	Z 	Z&*&=&=h>X&Y&Y######	Z $	X  	 F ((0000000000 	X 	X 	X$($;$;H<V$W$W!!!!!!	X,];q#l++,, 	{ 	{A"1oG&-.@&A#*55nEE  {  {Go  sJ  HJ  Mj  Hj  m{  H{  {  {  {  {yy 	"//!!!!!!!tsx   A 
A/A**A/4C 
DC==DD( (
E2EEBI 
J'JJ*J< <
K*K%%K*c                 H  K   |                      d          }d}d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         d	         }t          |          }|                    |          sJ d
|z   dz   |z               |d         d         }||k    sJ d|z   dz   |z               d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         d	         }	|	                    |          sJ d|	z   dz   |z               |d         d         }
|
|k    sJ d|z   dz   |
z               t                      st          |           d {V  dS )Nokx6b9ad766b55dBCDErS  r  r  rd   r  r   clOrdIdzokx - spot clientOrderId:  does not start with id: tagz
okx - id: z different from spot tag: rV  zokx - swap clientOrderId:  different from swap tag: T	r\  r  rA   r   r/  r   r  r   r!   )r:   rJ   rw   r  rE   r  	id_stringspot_tagr  r  swap_tags              r;   r  ztestMainClass.test_okx  s     --e44!	H''
GUAuMMMMMMMMMM 	H 	H 	H!+H,F!G!G	H,Q/	:GG	)))44  	O  	O6RUd6d  hC  7C  FO  7O  	O  	O  	O%a(/2~~~|b03OORZZ~~~!	H''%ERRRRRRRRRR 	H 	H 	H!+H,F!G!G	H1!4Y?#..y99  	Y  	Y;WZn;n  rM  <M  PY  <Y  	Y  	Y  	Y%a(/2~~~|b03OORZZ~~~yy 	"//!!!!!!!ts-   = 
A%A  A%C7 7
DDDc                   K   |                      d          }d}|                                 d {V  d }	 |                    ddddd           d {V  n+# t          $ r}t	          |j                  }Y d }~nd }~ww xY w|d         d	         }||k    sJ d
|z   dz   |z               t                      st          |           d {V  dS )N	cryptocomCCXTrS  r  r  rd   r  params	broker_idzcryptocom - id:  different from  broker_id: T)r\  r   r  rA   r   r/  r   r!   r:   rJ   rw   r  rE   r  s         r;   r  ztestMainClass.test_cryptocom7  s     --k::##%%%%%%%%%	=''
GUAuMMMMMMMMMM 	= 	= 	= !;<<GGGGGG	=H%k2	B 2R 7:X X[d dyy 	"//!!!!!!!ts   A 
A?!A::A?c                 n  K   |                      d          }d }d}|j        d         |k    s
J d            	 |                    ddddd	           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d
         |k    sJ d|z   dz               t                      st          |           d {V  dS )Nbybitr  brokerIdid not in optionsrS  r  r  rd   r  Refererzbybit - id:  not in headers.Tr\  r   r  rA   last_request_headersr   r!   r:   rJ   req_headersrw   rE   s        r;   r  ztestMainClass.test_bybitF  s     --g66
+r1113F111	8''
GUAuMMMMMMMMMM 	8 	8 	8"7KKKKKK	8 9%+++^b-@CU-U+++yy 	"//!!!!!!!ts   A 
A3"A..A3c                   K   |                      d          }d }|j        d         d         d         }|j        d         d         d         }|dk    sJ d|z   dz               |d	k    sJ d
|z   dz               	 |                    ddddd           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY wd}|d         |k    sJ d|z   dz               t                      st          |           d {V  dS )Nkucoinpartnerr  rw   r   ccxtzkucoin - id:  not in optionsz$9e58cc35-5b5e-4133-92ec-166e3f077cb8zkucoin - key:  not in options.rS  r  r  rd   r  KC-API-PARTNERr  Tr  )r:   rJ   r  r  spot_keyrE   rw   s          r;   r  ztestMainClass.test_kucoinU  s^     --h77"9-f5d;#I.v6u=&   /G";>O"O   AAAACSV^C^asCsAAA	8''
GUAuMMMMMMMMMM 	8 	8 	8"7KKKKKK	8 +,222Ob4HK]4]222yy 	"//!!!!!!!ts   9B 
B4#B//B4c                   K   |                      d          }d }d}|j        d         d         d         }|j        d         d         d         }||k    sJ d|z   dz               |d	k    sJ d
|z   dz               	 |                    ddddd           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t                      st          |           d {V  dS )Nkucoinfuturesccxtfuturesr  futurerw   r   zkucoinfutures - id: r  z$1b327198-f30c-4f14-a0ac-918871282f15zkucoinfutures - key: rV  r  r  rd   r  r  r  Tr  )r:   rJ   r  rw   	future_id
future_keyrE   s          r;   r  z testMainClass.test_kucoinfuturesg  sX     --o>>$Y/9$?	%i0:5A
B 6 BEW WCCCCE\_iEil~E~CCC	8''%ERRRRRRRRRR 	8 	8 	8"7KKKKKK	8+,2224JR4ORd4d222yy 	"//!!!!!!!ts   ;B 
B6%B11B6c                 z  K   |                      d          }d }d}|j        d         |k    sJ d|z   dz               	 |                    dddd	d
           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t                      st          |           d {V  dS )Nbitgetp4svebrokerzbitget - id: r  rS  r  r  rd   r  X-CHANNEL-API-CODEr  Tr  r  s        r;   r  ztestMainClass.test_bitgetx  s     --h77)R///21EHY1Y///	8''
GUAuMMMMMMMMMM 	8 	8 	8"7KKKKKK	8/0B666"8LOa8a666yy 	"//!!!!!!!t   A 
A9(A44A9c                   K   |                      d          }d }d}|j        d         |k    sJ d|z   dz               |                                 d {V  	 |                    dddd	d
           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t                      st          |           d {V  dS )Nmexcr  r  zmexc - id: r  rS  r  r  rd   r  sourcer  Tr\  r   r   r  rA   r  r   r!   r  s        r;   r  ztestMainClass.test_mexc  s2     --f55)R///1CFW1W///##%%%%%%%%%	8''
GUAuMMMMMMMMMM 	8 	8 	8"7KKKKKK	88$***MB,>AS,S***yy 	"//!!!!!!!t   A8 8
BBBc                   K   |                      d          }d}d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d	|z   d
z   |z               d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY wd }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }	|	                    |          sJ d|	z   d
z   |z               |d         }
|
                    |          sJ d|
z   d
z   |z               t                      st          |           d {V  dS )Nhtx
AA03022abcrS  r  r  rd   r  zclient-order-idzhtx - spot clientOrderId r  rV  rX  channel_codezhtx - swap channel_code z htx - swap inverse channel_code Tr  )r:   rJ   rw   r  rE   r  r  r  r  r  r  s              r;   r  ztestMainClass.test_htx  s     --e44!	H''
GUAuMMMMMMMMMM 	H 	H 	H!+H,F!G!G	H,->?GG	)))44  	N  	N6QTc6c  gB  7B  EN  7N  	N  	N  	N!	H''%ERRRRRRRRRR 	H 	H 	H!+H,F!G!G	H%)"	P''wq%PPPPPPPPPP 	P 	P 	P)3H4N)O)O&&&&&&	P1.A#..y99  	W  	W;UXl;l  pK  <K  NW  <W  	W  	W  	W"<^"L&11)<<  	e  	e>`cz>z  ~Y  ?Y  \e  ?e  	e  	e  	eyy 	"//!!!!!!!tsE   = 
A%A  A%*C
 

C2C--C28D 
E "D;;E c           	        K   |                      d          }d}d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d	|z   d
z   |z               d }	 |                    dddddddi           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }|                    |          sJ d|z   d
z   |z               t                      st          |           d {V  dS )Nwooz$bc830de7-50f3-460b-9ee0-f430f83f9dadrS  r  r  rd   r  r  zwoo - broker_id: r  rV  	stopPricerO   r  zwoo - brokerId: Tr  )	r:   rJ   rw   r  rE   r  r  stop_order_requestclient_order_id_stops	            r;   r  ztestMainClass.test_woo  s     --e443!	H''
GUAuMMMMMMMMMM 	H 	H 	H!+H,F!G!G	H&{3	GG	##I..yy0Ci0ORm0mpy0yyyy!	H''%EUT            	H 	H 	H!+H,F!G!G	H1*=#..y99  	O  	O;MPd;d  hC  <C  FO  <O  	O  	O  	Oyy 	"//!!!!!!!ts-   = 
A%A  A%*"C 
C5C00C5c                   K   |                      d          }d }d}|j        d         |k    sJ d|z   dz               |                                 d {V  	 |                    dddd	d
           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t                      st          |           d {V  dS )NbitmartCCXTxBitmart000r  zbitmart - id: r  rS  r  r  rd   r  zX-BM-BROKER-ID not in headersTr  r  s        r;   r  ztestMainClass.test_bitmart  s5     --i88
+r1113Cb3HK\3\111##%%%%%%%%%	8''
GUAuMMMMMMMMMM 	8 	8 	8"7KKKKKK	8+,2224Dr4IL]4]222yy 	"//!!!!!!!tr  c                   K   |                      d          }d}|j        d         |k    sJ d|z   dz               d }	 |                    dddd	d
           d {V  n+# t          $ r}t	          |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d|z   dz   |z               t                      st          |           d {V  dS )Ncoinexzx-167673045r  zcoinex - id: r  rS  r  r  rd   r  	client_idzcoinex - clientOrderId: r  T)
r\  r   r  rA   r   r/  r   r  r   r!   )r:   rJ   rw   r  rE   r  r  s          r;   r  ztestMainClass.test_coinex  s`     --h77
+r111?R3GJ[3[111!	H''
GUAuMMMMMMMMMM 	H 	H 	H!+H,F!G!G	H,[9GG	)))44  	M  	M6PSb6b  fA  7A  DM  7M  	M  	M  	Myy 	"//!!!!!!!t   A 
B(BBc                 z  K   |                      d          }d }d}|j        d         |k    sJ d|z   dz               	 |                    dddd	d
           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t                      st          |           d {V  dS )Nbingxr  r  zbingx - id: r  rS  r  r  rd   r  zX-SOURCE-KEYr  Tr  r  s        r;   r  ztestMainClass.test_bingx  s     --g66)R///"1DGX1X///	8''
GUAuMMMMMMMMMM 	8 	8 	8"7KKKKKK	8 >*b000.22EHZ2Z000yy 	"//!!!!!!!tr  c                   K   |                      d          }d}d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d	|z   d
z   |z               t                      st          |           d {V  dS )Nphemex
CCXT123456rS  r  r  rd   r  clOrdIDzphemex - clOrdID: r  Tr  )r:   rJ   rw   r  rE   r  r  s          r;   r  ztestMainClass.test_phemex  s      --h77	=''
GUAuMMMMMMMMMM 	= 	= 	= !;<<GGGGGG	=!),GG	)))44  	G  	G6J_6\_z6z  ~G  7G  	G  	G  	Gyy 	"//!!!!!!!ts   = 
A%A  A%c                   K   |                      d          }d}d }	 |                    dddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }t          |          }|                    |          sJ d|z   d	z   |z               t                      st          |           d {V  d
S )Nblofinec6dd3a7dd982d0bzLTC/USDT:USDTr  r  rd   r  zblofin - brokerId: r  Tr  )r:   rJ   rw   r  rE   r  r  s          r;   r  ztestMainClass.test_blofin  s     --h77	=''5!LLLLLLLLLL 	= 	= 	= !;<<GGGGGG	=J'	GG	##I..{{0E	0QTo0or{0{{{{yy 	"//!!!!!!!ts   < 
A$AA$c                   K   |                      d          }d|j        d<   d}|j        d         |k    s
J d            d }	 |                    ddd	d
d           d {V  n+# t          $ r}t	          |j                  }Y d }~nd }~ww xY w|d         }|                    t          |                    s
J d            t                      st          |           d {V  dS )Ncoinbaseinternationalrandom	portfolionfqkvdjpr  r  rW  r  r  rd   r  r  $clientOrderId does not start with idT
r\  r   r  rA   r   r/  r  r   r   r!   r:   rJ   rw   r  rE   r  s         r;   r  z(testMainClass.test_coinbaseinternational*  s%     --.EFF(0%
+r1113F111	=''%ERRRRRRRRRR 	= 	= 	= !;<<GGGGGG	=!"34))#b''22ZZ4ZZZZyy 	"//!!!!!!!ts   A" "
B
,BB
c                   K   |                      d          }d}|j        d         |k    s
J d            d }	 |                    ddddd	           d {V  n+# t          $ r}t	          |j                  }Y d }~nd }~ww xY w|d
         }|                    t          |                    s
J d            t                      st          |           d {V  dS )Ncoinbaser  r  r  rT  r  r  rd   r  r  r&  Tr'  r(  s         r;   r  z$testMainClass.test_coinbase_advanced:  s     --j99
+r1113F111	=''
GUAuMMMMMMMMMM 	= 	= 	= !;<<GGGGGG	=!"34))#b''22ZZ4ZZZZyy 	"//!!!!!!!ts   A 
B "A;;B c                   K   |                      d          }d|_        d}|                                 d {V  d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d	         }||k    sJ d
|z   dz   |z               t                      st          |           d {V  dS )Nwoofipro+secretsecretsecretsecretsecretsecretsecretsr  rW  r  r  rd   r  	order_tagzwoofipro - id: r  T	r\  rC  r   r  rA   r   r/  r   r!   r  s         r;   r  ztestMainClass.test_woofi_proI  s     --j99G##%%%%%%%%%	=''%ERRRRRRRRRR 	= 	= 	= !;<<GGGGGG	=K(	B 1B 69W WZc cyy 	"//!!!!!!!tr  c                   K   |                      d          }d|_        d}|                                 d {V  d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d	         }|d
         }|d         }||k    s-J dt          |          z   dz   t          |          z               dS )Noxfunr-  r   z
BTC/USD:OXr  r  rd   r  r  r   r  zoxfun - id: r  T)r\  rC  r   r  rA   r   r/  r   )r:   rJ   rw   r  rE   r  ri  r  s           r;   r  ztestMainClass.test_oxfunY  s     --g66G##%%%%%%%%%	=''guaOOOOOOOOOO 	= 	= 	= !;<<GGGGGG	="q	(O	BR 8;Y Y\_`i\j\j jtr  c                 :  K   |                      d          }d}d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }||k    sJ d	|z   d
z   |z               d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d         }||k    sJ d	|z   d
z   |z               t                      st          |           d {V  dS )Nxtr  rS  r  r  rd   r  mediaz	xt - id: r  rV  clientMediaTr\  r  rA   r   r/  r   r!   )r:   rJ   rw   r  rE   
spot_mediar  
swap_medias           r;   r  ztestMainClass.test_xti  s     --d33!	H''
GUAuMMMMMMMMMM 	H 	H 	H!+H,F!G!G	H'0
Rr!14P!PS]!]!	H''%ERRRRRRRRRR 	H 	H 	H!+H,F!G!G	H'6
Rr!14P!PS]!]yy 	"//!!!!!!!ts-   = 
A%A  A%B, ,
C6CCc                 "  K   |                      d          }d|_        d|_        d|j        d<   dddd	d
ddddddddddddgddddd|j        d<   d }d}|j        d         |k    sJ d|z   d z               |                                 d {V  	 |                    d!d"d#d$d%           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d&         |k    sJ d|z   d'z               t                      st          |           d {V  d(S ))Nparadex*0xc751489d24a33172541ea451bc253d7a9e98c781@c33b1eb4b53108bf52e10f636d8c1236c04c33a712357ba3543ab45f48a5cb0brK  	authTokenz(https://potc-testnet-sepolia.starknet.ioz5https://pathfinder.api.testnet.paradex.trade/rpc/v0_7PRIVATE_SN_POTC_SEPOLIAz&https://voyager.testnet.paradex.trade/A0x286003f7c7bfc3f94e8f0af48b48302e7aee2fb13c23b141479ba00832ef2c6   A0x3530cc4759d78042f1b543bf797f5f3d647cde0388c33734cf91b7f7b9314a9A0x41cb0280ebadaa75f996d8d92c6f265f6d040bb3ba442e5f86a554f1765244eA0x2c6a867917ef858d6b193a0ff9e62b46d0dc760366920d631715d58baeaca1fz	TEST USDCrK     *0x29A873159D5e14AcBd63913D4A7E2df04570c666*0x8586e05adc0C35aa11609023d4Ae6075Cb813b4CA0x6f373b346561036d98ea10fb3e60d2f459c872b1933b50b21fe6ef4fda3b75eA0x46e9237f5408b5f899e72125dd69bd55485a287aaf24663d3ebe00d237fc7ef)r   rK   decimalsl1_token_addressl1_bridge_addressl2_token_addressl2_bridge_address*0x582CC5d9b509391232cd544cDF9da036e55833Af*0x11bACdFbBcd3Febe5e8CEAa75E0Ef6444d9B45FB11155111z0.2)starknet_gateway_urlstarknet_fullnode_rpc_urlstarknet_chain_idblock_explorer_urlparaclear_addressparaclear_decimalsparaclear_account_proxy_hashparaclear_account_hashoracle_addressbridged_tokensl1_core_contract_addressl1_operator_addressl1_chain_idliquidation_feesystemConfigr  r  zparadex - id: r  zBTC/USD:USDCr  r  rd   r  zPARADEX-PARTNERr  T)
r\  rF  rH  r   r   r  rA   r  r   r!   r  s        r;   r  ztestMainClass.test_paradex~  s     --i88!M`(/%$N)`!:"J!d"#,o&iaDE[\     )U#O%$-,
 ,
(0 )R///1AB1FIZ1Z///##%%%%%%%%%	8''5QQQQQQQQQQ 	8 	8 	8"7KKKKKK	8,-3335E5JM^5^333yy 	"//!!!!!!!ts   B2 2
C<CCc                 8  K   |                      d          }d }d}	 |                    ddddd           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d	|z   d
z               t	                      st          |           d {V  dS )Nhashkey10000700011rS  r  r  rd   r  zINPUT-SOURCEzhashkey - id: r  Tr\  r  rA   r  r   r!   r  s        r;   r  ztestMainClass.test_hashkey  s      --i88	8''
GUAuMMMMMMMMMM 	8 	8 	8"7KKKKKK	8 >*b0002BR2GJ\2\000yy 	"//!!!!!!!t   = 
AAAc                 8  K   |                      d          }d }d}	 |                    ddddd           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d	|z   d
z               t	                      st          |           d {V  dS )N	coincatch47cfyrS  r  r  rd   r  r   zcoincatch - id: r  Trc  r  s        r;   r  ztestMainClass.test_coincatch  s      --k::	8''
GUAuMMMMMMMMMM 	8 	8 	8"7KKKKKK	8 /0B6668JR8ORd8d666yy 	"//!!!!!!!trd  c                 R  K   |                      d          }d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY wd}|d         |k    sJ d	|z   d
z               t                      st          |           d {V  dS )N	cryptomusrS  r  r  rd   r  r  r  zcryptomus - tag:  not in request.Tr6  )r:   rJ   r  rE   r  s        r;   r  ztestMainClass.test_cryptomus  s      --k::	=''
GVQNNNNNNNNNN 	= 	= 	= !;<<GGGGGG	=u~$$$&9C&?BT&T$$$yy 	"//!!!!!!!ts   ; 
A#AA#c                   K   |                      d          }d}|j        d         |k    sJ d|z   dz               d }	 dddd}d|_        d	|_        |                    d
dddd|           d {V  n+# t
          $ r}t          |j                  }Y d }~nd }~ww xY w|d         |k    sJ d|z   dz               t                      st          |           d {V  dS )Nderive*0x0ad42b8e602c2d3d475ae52d678cf63d84ab2749rw   zderive - id: r  i  
   )subaccount_idmax_feederiveWalletAddressB0x7b77bb7b20e92bbb85f2a22b330b896959229a5790e35f2f290922de3fb22ad5z	LBTC/USDCr  r  g{Gz?i  referral_codezderive - referral_code: rj  T)
r\  r   rF  rH  r  rA   r   r/  r   r!   )r:   rJ   rw   r  r  rE   s         r;   r  ztestMainClass.test_derive  sB     --h779%+++_r-ADU-U+++
	=!%'S F
 &RH""fH''WfdDRXYYYYYYYYYY 	= 	= 	= !;<<GGGGGG	='2---/IB/NQc/c---yy 	"//!!!!!!!ts   4A3 3
B=BBc                   K   |                      d          }d|_        d}|                                 d {V  d }	 |                    ddddd           d {V  n+# t          $ r}t          |j                  }Y d }~nd }~ww xY w|d	         }||k    sJ d
|z   dz   |z               t                      st          |           d {V  dS )N	modetrader-  CCXTMODErW  r  r  rd   r  r.  zmodetrade - id: r  Tr/  r  s         r;   r  ztestMainClass.test_mode_trade  s     --k::G##%%%%%%%%%	=''%ERRRRRRRRRR 	= 	= 	= !;<<GGGGGG	=K(	B 2R 7:X X[d dyy 	"//!!!!!!!tr  c                 T  K   |                      d          }d|_        d|_        d }d}	 |                    ddddd	           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d
         |k    sJ d|z   dz               t                      st          |           d {V  dS )Nbackpackz,Jcj3vxDMAIrx0G5YYfydzS/le/owoQ+VSS164zC1RXo=z,sRkC124Iazob0QYvaFj9dm63MXEVY48lDNt+/GVDVAU=1400rU  r  r  rd   i  zX-Broker-Idzbackpack - id: r  T)r\  rB  rC  r  rA   r  r   r!   r  s        r;   r  ztestMainClass.test_backpack  s      --j99HH	8''
GUAtLLLLLLLLLL 	8 	8 	8"7KKKKKK	8 =)R///1BR1GJ\1\///yy 	"//!!!!!!!ts   A 
A&A!!A&c                 8  K   |                      d          }d }d}	 |                    ddddd           d {V  n# t          $ r}|j        }Y d }~nd }~ww xY w|d         |k    sJ d	|z   d
z               t	                      st          |           d {V  dS )Ntoobit177321641268789rS  r  r  rd   r  zX-BB-API-PLATFORMztoobit - id: r  Trc  r  s        r;   r  ztestMainClass.test_toobit  s      --h77	8''
GUAuMMMMMMMMMM 	8 	8 	8"7KKKKKK	8 ./25557KN`7`555yy 	"//!!!!!!!trd  )N)T)TN)NN)d__name__
__module____qualname__r.   r1  r8  r/   r7   r-   r0   r1   r2   r3   r4   r6   r5   rh   r   r   r   r[   r  r9   r8   r   r<   rF   r@   r^   rX   r   r]   rW   r   r   r  r  r  r,  r5  rC  rE  rj  rr  rn  r  r  r  r_   r  r  r  r  r  r  r  r  r  r!  r%  r)  r4  r=  r\  ru  rz  r~  r  rS   r  rT   rU   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  r  r  r   r=   r;   r)   r)      ss       H !MHNDGELIG$&!OJL
CD$    & & &PL L L  N N N,' ,' ,'\  - - -^) ) )V ;= G G G GR) ) )V  2    $             D% % % %NB5 B5 B5H  0h h h    4
# 
# 
# 
#    
   $  $  "T T T Tl	 	 	 	   & & &Pf f f    0  &A A AF7 7 7 7r3 3 3 3j     (   '- '- '- '-R   	 	 	D D DL  4      $  "      >  4           >             *( ( (T        *          r=   r)   )(r  tests_helpersr   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   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r)   r  r=   r;   <module>r     s     o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	  o	J J J J J J J J J Jr=   