o
    ¢ØÆhxˆ  ã                   @   sø   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. G dd	„ d	eƒZ/dS )
é    N)ÚLocalAccount)ÚAPI)ÚInfo)ÚMAINNET_API_URL)ÚCancelByCloidRequestÚCancelRequestÚModifyRequestÚ
OidOrCloidÚOrderRequestÚ	OrderTypeÚ	OrderWireÚScheduleCancelActionÚfloat_to_usd_intÚget_timestamp_msÚorder_request_to_order_wireÚorder_wires_to_order_actionÚ
sign_agentÚsign_approve_builder_feeÚ%sign_convert_to_multi_sig_user_actionÚsign_l1_actionÚsign_multi_sig_actionÚsign_send_asset_actionÚsign_spot_transfer_actionÚsign_token_delegate_actionÚsign_usd_class_transfer_actionÚsign_usd_transfer_actionÚ sign_withdraw_from_bridge_action)
ÚAnyÚBuilderInfoÚCloidÚDictÚListÚMetaÚOptionalÚPerpDexSchemaInputÚSpotMetaÚTuplec                       sH  e Zd ZdZ							dÀdedee dee dee dee dee d	ee	e  d
ee
 f‡ fdd„Zdd„ Z	dÁdedede
dee
 de
f
dd„Zdee ddfdd„Z			dÂdedede
de
dededee dee defd d!„ZdÁd"e	e dee defd#d$„Z		dÃd%ededede
de
dededee defd&d'„Zd(e	e defd)d*„Zdeddfdedede
dee
 de
dee dee defd+d,„Zddeddfd-edee
 dee
 de
dee dee defd.d/„Zded%edefd0d1„Zdededefd2d3„Zd4e	e  defd5d6„Z!d4e	e" defd7d8„Z#d9ee defd:d;„Z$dÄd=eded>edefd?d@„Z%dAe
dedefdBdC„Z&dDedefdEdF„Z'dedefdGdH„Z(dAe
dIedefdJdK„Z)dLedMedNedOedAe
defdPdQ„Z*dRedSedTedefdUdV„Z+dRedSedOedAe
def
dWdX„Z,dedSedTedefdYdZ„Z-dAe
dLedefd[d\„Z.dAe
dLedOedefd]d^„Z/d_ed`edaedefdbdc„Z0dAe
dLedefddde„Z1dÁdee de2eef fdfdg„Z3dedhedefdidj„Z4dke	e dledefdmdn„Z5doedpedqedredsedefdtdu„Z6dOedve	e2eef  dwe	e2eef  defdxdy„Z7dOedefdzd{„Z8dOed|ed}edefd~d„Z9dOedefd€d�„Z:dOedefd‚dƒ„Z;d„edOedefd…d†„Z<dOed‡edˆedefd‰dŠ„Z=d‹edŒedefd�dŽ„Z>d�ed�e
d‘e
d’ed“ee defd”d•„Z?dOed–edefd—d˜„Z@d™edree d-edpedšed›edœed�eeA defdždŸ„ZBd™ed eCeef d¡e	eCeef  d¢eCeef def
d£d¤„ZDdefd¥d¦„ZEdefd§d¨„ZFd„edefd©dª„ZGd«eded¬ed­ed®ed¯ed°ed±edefd²d³„ZHd«ee dee d¬ee d°ed´ee d®ee d¯ee defdµd¶„ZIdefd·d¸„ZJdÁd¹dº„ZKd»edefd¼d½„ZLd¾d¿„ ZM‡  ZNS )ÅÚExchangegš™™™™™©?NÚwalletÚbase_urlÚmetaÚvault_addressÚaccount_addressÚ	spot_metaÚ	perp_dexsÚtimeoutc	           	         s>   t ƒ  ||¡ || _|| _|| _t|d||||ƒ| _d | _d S )NT)ÚsuperÚ__init__r(   r+   r,   r   ÚinfoÚexpires_after)	Úselfr(   r)   r*   r+   r,   r-   r.   r/   ©Ú	__class__© úa/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/hyperliquid/exchange.pyr1   6   s   
zExchange.__init__c                 C   s:   ||||d dvr| j nd | jdœ}t |¡ |  d|¡S )NÚtype)ÚusdClassTransferÚ	sendAsset)ÚactionÚnonceÚ	signatureÚvaultAddressÚexpiresAfterz	/exchange)r+   r3   ÚloggingÚdebugÚpost)r4   r<   r>   r=   Úpayloadr7   r7   r8   Ú_post_actionH   s   û
zExchange._post_actionÚnameÚis_buyÚslippageÚpxÚreturnc                 C   st   | j j| }|st| j  ¡ | ƒ}| j j| }|dk}||r"d| nd| 9 }tt|d›ƒ|s1dnd| j j|  ƒS )Ni'  é   z.5gé   é   )r2   Úname_to_coinÚfloatÚall_midsÚcoin_to_assetÚroundÚasset_to_sz_decimals)r4   rF   rG   rH   rI   ÚcoinÚassetÚis_spotr7   r7   r8   Ú_slippage_priceS   s   &zExchange._slippage_pricer3   c                 C   s
   || _ d S ©N)r3   )r4   r3   r7   r7   r8   Úset_expires_afterk   ó   
zExchange.set_expires_afterFÚszÚlimit_pxÚ
order_typeÚreduce_onlyÚcloidÚbuilderc	           
      C   s,   ||||||dœ}	|r||	d< |   |	g|¡S )N)rT   rG   r[   r\   r]   r^   r_   )Úbulk_orders)
r4   rF   rG   r[   r\   r]   r^   r_   r`   Úorderr7   r7   r8   rb   n   s   úzExchange.orderÚorder_requestsc                    sb   ‡ fdd„|D ƒ}t ƒ }|r|d  ¡ |d< t||ƒ}tˆ j|ˆ j|ˆ jˆ jtkƒ}ˆ  	|||¡S )Nc                    s"   g | ]}t |ˆ j |d  ¡ƒ‘qS )rT   )r   r2   Úname_to_asset)Ú.0rb   ©r4   r7   r8   Ú
<listcomp>†   s    ÿz(Exchange.bulk_orders.<locals>.<listcomp>Úb)
r   Úlowerr   r   r(   r+   r3   r)   r   rE   )r4   rc   r`   Úorder_wiresÚ	timestampÚorder_actionr>   r7   rf   r8   ra   …   s(   
ÿ
ú	ýzExchange.bulk_ordersÚoidc	           
   	   C   s&   ||||||||dœdœ}	|   |	g¡S )N)rT   rG   r[   r\   r]   r^   r_   ©rm   rb   )Úbulk_modify_orders_new)
r4   rm   rF   rG   r[   r\   r]   r^   r_   Úmodifyr7   r7   r8   Úmodify_orderž   s   ùþzExchange.modify_orderÚmodify_requestsc                    sN   t ƒ }‡ fdd„|D ƒ}d|dœ}tˆ j|ˆ j|ˆ jˆ jtkƒ}ˆ  |||¡S )Nc              	      sN   g | ]#}t |d  tƒr|d   ¡ n|d  t|d ˆ j |d d ¡ƒdœ‘qS )rm   rb   rT   rn   )Ú
isinstancer   Úto_rawr   r2   rd   )re   rp   rf   r7   r8   rg   ¹   s     ýþÿz3Exchange.bulk_modify_orders_new.<locals>.<listcomp>ÚbatchModify)r9   Úmodifies©r   r   r(   r+   r3   r)   r   rE   )r4   rr   rk   Úmodify_wiresÚmodify_actionr>   r7   rf   r8   ro   ·   s(   
û	þú	ýzExchange.bulk_modify_orders_newc              
   C   s2   |   ||||¡}| j||||dddiid||d�S )NÚlimitÚtifÚIocF©r]   r^   r_   r`   )rW   rb   )r4   rF   rG   r[   rI   rH   r_   r`   r7   r7   r8   Úmarket_openÕ   s   ÿzExchange.market_openrT   c                 C   s°   | j j}| jr
| j}| jr| j}| j |¡d }|D ];}	|	d }
||
d kr'qt|
d ƒ}|s3t|ƒ}|dk r9dnd}|  ||||¡}| j	||||dd	d
iid||d�  S d S )NÚassetPositionsÚpositionrT   Úszir   TFrz   r{   r|   r}   )
r(   Úaddressr,   r+   r2   Ú
user_staterO   ÚabsrW   rb   )r4   rT   r[   rI   rH   r_   r`   r‚   Ú	positionsr€   Úitemr�   rG   r7   r7   r8   Úmarket_closeæ   s4   	

øõzExchange.market_closec                 C   ó   |   ||dœg¡S )N)rT   rm   )Úbulk_cancel)r4   rF   rm   r7   r7   r8   Úcancel  ó   zExchange.cancelc                 C   rˆ   )N)rT   r_   )Úbulk_cancel_by_cloid)r4   rF   r_   r7   r7   r8   Úcancel_by_cloid  r‹   zExchange.cancel_by_cloidÚcancel_requestsc                    óJ   t ƒ }d‡ fdd„|D ƒdœ}tˆ j|ˆ j|ˆ jˆ jtkƒ}ˆ  |||¡S )NrŠ   c                    s&   g | ]}ˆ j  |d  ¡|d dœ‘qS )rT   rm   )ÚaÚo)r2   rd   ©re   rŠ   rf   r7   r8   rg     s    ýþÿz(Exchange.bulk_cancel.<locals>.<listcomp>©r9   Úcancelsrw   ©r4   rŽ   rk   Úcancel_actionr>   r7   rf   r8   r‰     s&   
ûþ
ú	ýzExchange.bulk_cancelc                    r�   )NÚcancelByCloidc                    s*   g | ]}ˆ j  |d  ¡|d  ¡ dœ‘qS )rT   r_   )rU   r_   )r2   rd   rt   r’   rf   r7   r8   rg   1  s    ý
þÿz1Exchange.bulk_cancel_by_cloid.<locals>.<listcomp>r“   rw   r•   r7   rf   r8   rŒ   ,  s&   
ûþ
ú	ýzExchange.bulk_cancel_by_cloidÚtimec                 C   sJ   t ƒ }ddi}|dur||d< t| j|| j|| j| jtkƒ}|  |||¡S )aÛ  Schedules a time (in UTC millis) to cancel all open orders. The time must be at least 5 seconds after the current time.
        Once the time comes, all open orders will be canceled and a trigger count will be incremented. The max number of triggers
        per day is 10. This trigger count is reset at 00:00 UTC.

        Args:
            time (int): if time is not None, then set the cancel time in the future. If None, then unsets any cancel time in the future.
        r9   ÚscheduleCancelNr˜   rw   )r4   r˜   rk   Úschedule_cancel_actionr>   r7   r7   r8   Úschedule_cancelH  s$   ÿúýzExchange.schedule_cancelTÚleverageÚis_crossc                 C   sH   t ƒ }d| j |¡||dœ}t| j|| j|| j| jtkƒ}|  	|||¡S )NÚupdateLeverage)r9   rU   ÚisCrossrœ   )
r   r2   rd   r   r(   r+   r3   r)   r   rE   )r4   rœ   rF   r�   rk   Úupdate_leverage_actionr>   r7   r7   r8   Úupdate_leveraged  s&   
üúýzExchange.update_leverageÚamountc                 C   sP   t ƒ }t|ƒ}d| j |¡d|dœ}t| j|| j|| j| jt	kƒ}|  
|||¡S )NÚupdateIsolatedMarginT)r9   rU   ÚisBuyÚntli)r   r   r2   rd   r   r(   r+   r3   r)   r   rE   )r4   r¢   rF   rk   Úupdate_isolated_margin_actionr>   r7   r7   r8   Úupdate_isolated_marginz  s(   
üúýzExchange.update_isolated_marginÚcodec                 C   ó:   t ƒ }d|dœ}t| j|d || j| jtkƒ}|  |||¡S )NÚsetReferrer)r9   r¨   ©r   r   r(   r3   r)   r   rE   )r4   r¨   rk   Úset_referrer_actionr>   r7   r7   r8   Úset_referrer‘  ó"   þúýzExchange.set_referrerc                 C   r©   )NÚcreateSubAccount)r9   rF   r«   )r4   rF   rk   Úcreate_sub_account_actionr>   r7   r7   r8   Úcreate_sub_account¥  r®   zExchange.create_sub_accountÚto_perpc                 C   sT   t ƒ }t|ƒ}| jr|d| j› �7 }d|||dœ}t| j|| jtkƒ}|  |||¡S )Nz subaccount:r:   )r9   r¢   ÚtoPerpr=   )r   Ústrr+   r   r(   r)   r   rE   )r4   r¢   r²   rk   Ú
str_amountr<   r>   r7   r7   r8   Úusd_class_transfer¹  s   üýzExchange.usd_class_transferÚdestinationÚ
source_dexÚdestination_dexÚtokenc           
   	   C   sR   t ƒ }t|ƒ}d|||||| jr| jnd|dœ}t| j|| jtkƒ}	|  ||	|¡S )zµ
        For the default perp dex use the empty string "" as name. For spot use "spot".
        Token must match the collateral token if transferring to or from a perp dex.
        r;   Ú )r9   r·   Ú	sourceDexÚdestinationDexrº   r¢   ÚfromSubAccountr=   )r   r´   r+   r   r(   r)   r   rE   )
r4   r·   r¸   r¹   rº   r¢   rk   rµ   r<   r>   r7   r7   r8   Ú
send_assetÌ  s"   ø
ýzExchange.send_assetÚsub_account_userÚ
is_depositÚusdc                 C   s>   t ƒ }d|||dœ}t| j|d || j| jtkƒ}|  |||¡S )NÚsubAccountTransfer)r9   ÚsubAccountUserÚ	isDepositrÂ   r«   )r4   rÀ   rÁ   rÂ   rk   Úsub_account_transfer_actionr>   r7   r7   r8   Úsub_account_transferå  s&   üúýzExchange.sub_account_transferc                 C   sD   t ƒ }d|||t|ƒdœ}t| j|d || j| jtkƒ}|  |||¡S )NÚsubAccountSpotTransfer)r9   rÄ   rÅ   rº   r¢   ©r   r´   r   r(   r3   r)   r   rE   )r4   rÀ   rÁ   rº   r¢   rk   rÆ   r>   r7   r7   r8   Úsub_account_spot_transferû  s(   ûúýz"Exchange.sub_account_spot_transferc                 C   sB   t ƒ }d|||dœ}| jtk}t| j|d || j|ƒ}|  |||¡S )NÚvaultTransfer)r9   r?   rÅ   rÂ   )r   r)   r   r   r(   r3   rE   )r4   r+   rÁ   rÂ   rk   Úvault_transfer_actionÚ
is_mainnetr>   r7   r7   r8   Úvault_usd_transfer  s   ü
ýzExchange.vault_usd_transferc                 C   ó>   t ƒ }|t|ƒ|ddœ}| jtk}t| j||ƒ}|  |||¡S )NÚusdSend©r·   r¢   r˜   r9   )r   r´   r)   r   r   r(   rE   ©r4   r¢   r·   rk   r<   rÍ   r>   r7   r7   r8   Úusd_transfer"  ó   
ýzExchange.usd_transferc                 C   s@   t ƒ }|t|ƒ||ddœ}| jtk}t| j||ƒ}|  |||¡S )NÚspotSend)r·   r¢   rº   r˜   r9   )r   r´   r)   r   r   r(   rE   )r4   r¢   r·   rº   rk   r<   rÍ   r>   r7   r7   r8   Úspot_transfer-  s   û
ýzExchange.spot_transferÚ	validatorÚweiÚis_undelegatec                 C   s<   t ƒ }||||ddœ}| jtk}t| j||ƒ}|  |||¡S )NÚtokenDelegate)r×   rØ   ÚisUndelegater=   r9   )r   r)   r   r   r(   rE   )r4   r×   rØ   rÙ   rk   r<   rÍ   r>   r7   r7   r8   Útoken_delegate>  s   û
ýzExchange.token_delegatec                 C   rÏ   )NÚ	withdraw3rÑ   )r   r´   r)   r   r   r(   rE   rÒ   r7   r7   r8   Úwithdraw_from_bridgeO  rÔ   zExchange.withdraw_from_bridgec                 C   sl   dt  d¡ }tj |¡}tƒ }| jtk}d|j|pd|dœ}t	| j
||ƒ}|d u r-|d= |  |||¡|fS )NÚ0xé    ÚapproveAgentr»   )r9   ÚagentAddressÚ	agentNamer=   rã   )ÚsecretsÚ	token_hexÚeth_accountÚAccountÚfrom_keyr   r)   r   r‚   r   r(   rE   )r4   rF   Ú	agent_keyÚaccountrk   rÍ   r<   r>   r7   r7   r8   Úapprove_agentZ  s&   
üýúzExchange.approve_agentÚmax_fee_ratec                 C   s6   t ƒ }|||ddœ}t| j|| jtkƒ}|  |||¡S )NÚapproveBuilderFee)Ú
maxFeeRater`   r=   r9   )r   r   r(   r)   r   rE   )r4   r`   rì   rk   r<   r>   r7   r7   r8   Úapprove_builder_feer  s   zExchange.approve_builder_feeÚauthorized_usersÚ	thresholdc                 C   sL   t ƒ }t|ƒ}||dœ}dt |¡|dœ}t| j|| jtkƒ}|  |||¡S )N)ÚauthorizedUsersrñ   ÚconvertToMultiSigUser)r9   Úsignersr=   )	r   ÚsortedÚjsonÚdumpsr   r(   r)   r   rE   )r4   rð   rñ   rk   rô   r<   r>   r7   r7   r8   Úconvert_to_multi_sig_usery  s   þýýz"Exchange.convert_to_multi_sig_userÚ
token_nameÚsz_decimalsÚwei_decimalsÚmax_gasÚ	full_namec           	      C   sJ   t ƒ }d|||dœ||dœdœ}t| j|d || j| jtkƒ}|  |||¡S )NÚ
spotDeploy)rF   Ú
szDecimalsÚweiDecimals)ÚspecÚmaxGasÚfullName)r9   ÚregisterToken2r«   )	r4   rù   rú   rû   rü   rý   rk   r<   r>   r7   r7   r8   Úspot_deploy_register_tokenŒ  s(   
ýþúýz#Exchange.spot_deploy_register_tokenÚuser_and_weiÚexisting_token_and_weic                 C   sL   t ƒ }d|dd„ |D ƒ|dœdœ}t| j|d || j| jtkƒ}|  |||¡S )Nrþ   c                 S   s   g | ]
\}}|  ¡ |f‘qS r7   )ri   )re   ÚuserrØ   r7   r7   r8   rg   ®  ó    z5Exchange.spot_deploy_user_genesis.<locals>.<listcomp>)rº   Ú
userAndWeiÚexistingTokenAndWei)r9   ÚuserGenesisr«   )r4   rº   r  r  rk   r<   r>   r7   r7   r8   Úspot_deploy_user_genesis¦  s(   ýþúýz!Exchange.spot_deploy_user_genesisc                 C   ó   |   d|¡S )NÚenableFreezePrivilege©Úspot_deploy_token_action_inner©r4   rº   r7   r7   r8   Ú#spot_deploy_enable_freeze_privilegeÀ  ó   z,Exchange.spot_deploy_enable_freeze_privileger  Úfreezec                 C   sF   t ƒ }d|| ¡ |dœdœ}t| j|d || j| jtkƒ}|  |||¡S )Nrþ   )rº   r  r  )r9   Ú
freezeUser©r   ri   r   r(   r3   r)   r   rE   )r4   rº   r  r  rk   r<   r>   r7   r7   r8   Úspot_deploy_freeze_userÃ  s(   ýþúýz Exchange.spot_deploy_freeze_userc                 C   r  )NÚrevokeFreezePrivileger  r  r7   r7   r8   Ú#spot_deploy_revoke_freeze_privilegeÛ  r  z,Exchange.spot_deploy_revoke_freeze_privilegec                 C   r  )NÚenableQuoteTokenr  r  r7   r7   r8   Úspot_deploy_enable_quote_tokenÞ  r  z'Exchange.spot_deploy_enable_quote_tokenÚvariantc                 C   s@   t ƒ }dd|d|ii}t| j|d || j| jtkƒ}|  |||¡S )Nr9   rþ   rº   r«   )r4   r  rº   rk   r<   r>   r7   r7   r8   r  á  s&   ÿþúýz'Exchange.spot_deploy_token_action_innerÚ
max_supplyÚno_hyperliquidityc                 C   sP   t ƒ }||dœ}|rd|d< d|dœ}t| j|d || j| jtkƒ}|  |||¡S )N)rº   Ú	maxSupplyTÚnoHyperliquidityrþ   )r9   Úgenesisr«   )r4   rº   r  r  rk   r"  r<   r>   r7   r7   r8   Úspot_deploy_genesis÷  s,   þþúýzExchange.spot_deploy_genesisÚ
base_tokenÚquote_tokenc                 C   sB   t ƒ }dd||gidœ}t| j|d || j| jtkƒ}|  |||¡S )Nrþ   Útokens)r9   ÚregisterSpotr«   )r4   r$  r%  rk   r<   r>   r7   r7   r8   Úspot_deploy_register_spot  s$   ÿþúýz"Exchange.spot_deploy_register_spotÚspotÚstart_pxÚorder_szÚn_ordersÚn_seeded_levelsc           
      C   s`   t ƒ }|t|ƒt|ƒ|dœ}|d ur||d< d|dœ}t| j|d || j| jtkƒ}	|  ||	|¡S )N)r)  ÚstartPxÚorderSzÚnOrdersÚnSeededLevelsrþ   )r9   ÚregisterHyperliquidityrÉ   )
r4   r)  r*  r+  r,  r-  rk   Úregister_hyperliquidityr<   r>   r7   r7   r8   Ú#spot_deploy_register_hyperliquidity'  s0   üþúýz,Exchange.spot_deploy_register_hyperliquidityÚsharec                 C   s@   t ƒ }d||dœdœ}t| j|d || j| jtkƒ}|  |||¡S )Nrþ   )rº   r5  )r9   ÚsetDeployerTradingFeeSharer«   )r4   rº   r5  rk   r<   r>   r7   r7   r8   Ú*spot_deploy_set_deployer_trading_fee_shareE  s&   þþúýz3Exchange.spot_deploy_set_deployer_trading_fee_shareÚdexÚ	oracle_pxÚmargin_table_idÚonly_isolatedÚschemac	                 C   sˆ   t ƒ }	d }
|d ur|d |d |d d ur|d  ¡ nd dœ}
d||||||dœ||
dœdœ}t| j|d |	| j| jtkƒ}|  |||	¡S )	Nr  ÚcollateralTokenÚoracleUpdater)r  r=  r>  Ú
perpDeploy)rT   rÿ   ÚoraclePxÚmarginTableIdÚonlyIsolated)r  ÚassetRequestr8  r<  )r9   ÚregisterAssetr  )r4   r8  rü   rT   rú   r9  r:  r;  r<  rk   Úschema_wirer<   r>   r7   r7   r8   Úperp_deploy_register_asset\  s@   ýûöþúýz#Exchange.perp_deploy_register_assetÚ
oracle_pxsÚall_mark_pxsÚexternal_perp_pxsc                 C   sr   t ƒ }tt| ¡ ƒƒ}dd„ |D ƒ}tt| ¡ ƒƒ}d||||dœdœ}	t| j|	d || j| jtkƒ}
|  	|	|
|¡S )Nc                 S   s   g | ]
}t t| ¡ ƒƒ‘qS r7   )rõ   ÚlistÚitems)re   Úmark_pxsr7   r7   r8   rg   •  r	  z3Exchange.perp_deploy_set_oracle.<locals>.<listcomp>r?  )r8  Ú	oraclePxsÚmarkPxsÚexternalPerpPxs)r9   Ú	setOracle)
r   rõ   rJ  rK  r   r(   r3   r)   r   rE   )r4   r8  rG  rH  rI  rk   Úoracle_pxs_wireÚmark_pxs_wireÚexternal_perp_pxs_wirer<   r>   r7   r7   r8   Úperp_deploy_set_oracleŒ  s0   üþ	úýzExchange.perp_deploy_set_oraclec                 C   ó
   |   d¡S )NÚ
unjailSelf©Úc_signer_innerrf   r7   r7   r8   Úc_signer_unjail_self®  rZ   zExchange.c_signer_unjail_selfc                 C   rU  )NÚjailSelfrW  rf   r7   r7   r8   Úc_signer_jail_self±  rZ   zExchange.c_signer_jail_selfc                 C   s<   t ƒ }dd|d i}t| j|d || j| jtkƒ}|  |||¡S )Nr9   ÚCSignerActionr«   )r4   r  rk   r<   r>   r7   r7   r8   rX  ´  s"   þúýzExchange.c_signer_innerÚnode_ipÚdescriptionÚdelegations_disabledÚcommission_bpsÚsignerÚunjailedÚinitial_weic	                 C   sT   t ƒ }	dd|i|||||dœ||dœdœ}
t| j|
d |	| j| jtkƒ}|  |
||	¡S )NÚCValidatorActionÚIp)r]  rF   r^  r_  r`  ra  )Úprofilerb  rc  )r9   Úregisterr«   )r4   r]  rF   r^  r_  r`  ra  rb  rc  rk   r<   r>   r7   r7   r8   Úc_validator_registerÈ  s4   úöþúýzExchange.c_validator_registerÚdisable_delegationsc              	   C   sZ   t ƒ }d|d u r
d nd|i||||||dœdœ}	t| j|	d || j| jtkƒ}
|  |	|
|¡S )Nrd  re  )r]  rF   r^  rb  ri  r`  ra  )r9   ÚchangeProfiler«   )r4   r]  rF   r^  rb  ri  r`  ra  rk   r<   r>   r7   r7   r8   Úc_validator_change_profileñ  s0   
ùþúýz#Exchange.c_validator_change_profilec                 C   s:   t ƒ }dd dœ}t| j|d || j| jtkƒ}|  |||¡S )Nrd  )r9   Ú
unregisterr«   )r4   rk   r<   r>   r7   r7   r8   Úc_validator_unregister  r®   zExchange.c_validator_unregisterc           	      C   sT   |  ¡ }dd||| jj  ¡ |dœdœ}| jtk}t| j||||| jƒ}|  |||¡S )NÚmultiSigÚ0x66eee)ÚmultiSigUserÚouterSignerr<   )r9   ÚsignatureChainIdÚ
signaturesrD   )ri   r(   r‚   r)   r   r   r3   rE   )	r4   Úmulti_sig_userÚinner_actionrs  r=   r+   Úmulti_sig_actionrÍ   r>   r7   r7   r8   Ú	multi_sig*  s.   
ýü

úýzExchange.multi_sigÚenablec                 C   r©   )NÚevmUserModify)r9   ÚusingBigBlocksr«   )r4   rx  rk   r<   r>   r7   r7   r8   Úuse_big_blocksE  r®   zExchange.use_big_blocksc                 C   s4   ddi}t | j|| j|| j| jtkƒ}|  |||¡S )Nr9   Únoop)r   r(   r+   r3   r)   r   rE   )r4   r=   r<   r>   r7   r7   r8   r|  Y  s
   ÿzExchange.noop)NNNNNNNrX   )FNN)FN)T)OÚ__name__Ú
__module__Ú__qualname__ÚDEFAULT_SLIPPAGEr   r#   r´   r"   r%   r!   rO   r1   rE   ÚboolrW   ÚintrY   r   r   r   r   rb   r
   ra   r	   rq   r   ro   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(  r4  r7  r$   rF  r    rT  rY  r[  rX  rh  rk  rm  rw  r{  r|  Ú__classcell__r7   r7   r5   r8   r'   2   s   ÷þýüûúù
ø	÷ûþýüû
ú
÷þýüûúùø	÷

ö !÷þýüûúùø	÷

ö#øþýüûúùø	
÷ùþýüûúù
ø%" ÿÿÿÿÿ
þÿÿÿ
þÿÿÿÿÿ
þþýüûúùø	÷

ö0þ
ýü
û
ú"þýüûúùø	÷

ö)þýüûúùø	
÷%
r'   )0rö   rA   rä   ræ   Úeth_account.signers.localr   Úhyperliquid.apir   Úhyperliquid.infor   Úhyperliquid.utils.constantsr   Úhyperliquid.utils.signingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úhyperliquid.utils.typesr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r7   r7   r7   r8   Ú<module>   s    d0