o
    ¢ØÆhŒ:  ã                   @   sf  d dl Z d dlmZ d dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZmZmZmZ eed ed ed	 f Zeed
 ed f ZeddeiƒZedeeedœƒZedeeedœƒZedeedœdd�Zedeedœdd�Zedeeeeeeeee  dœdd�Zeeef Zedeedœdd�ZedeedœƒZ edeedœƒZ!eed ed ed  f Z"ed!eeeeeee d"œƒZ#ed#eeeeeeeee  d$œƒZ$ed%ee$dœƒZ%ed&ed' eee  d(œƒZ&d)d*d+œd,d*d+œd-d*d+œd.d/d+œgZ'd)d*d+œd,d*d+œd0d*d+œd-d*d+œd.d/d+œgZ(d)d*d+œd,d*d+œd-d*d+œd.d/d+œgZ)d)d*d+œd-d*d+œd1d2d+œd3d/d+œgZ*d)d*d+œd,d*d+œd4d*d+œd5d*d+œd0d*d+œd-d*d+œd6d*d+œd3d/d+œgZ+d)d*d+œd7d8d+œd9d/d+œd:d2d+œd3d/d+œgZ,d)d*d+œd;d*d+œd3d/d+œgZ-d)d*d+œd<d=d+œd3d/d+œgZ.d>ed?efd@dA„Z/dBdC„ Z0dDdE„ Z1dFdG„ Z2dHdI„ Z3dJdK„ Z4dLdM„ Z5dNdO„ Z6dPdQ„ Z7dRdS„ Z8dTdU„ Z9dVdW„ Z:dXdY„ Z;dZd[„ Z<d\d]„ Z=d^d_„ Z>d`da„ Z?dbdc„ Z@ddde„ ZAdfdg„ ZBdhdi„ ZCdjdk„ ZDdldm„ ZEdndo„ ZFdpdq„ ZGdred?efdsdt„ZHdred?efdudv„ZIdred?efdwdx„ZJdredyed?efdzd{„ZKd?efd|d}„ZLd~eded?e$fd€d�„ZMd„d‚dƒ„ZNdS )…é    N)ÚDecimal)ÚAccount)Úencode_typed_data)ÚkeccakÚto_hex)ÚCloidÚLiteralÚNotRequiredÚOptionalÚ	TypedDictÚUnionÚAloÚIocÚGtcÚtpÚslÚLimitOrderTypeÚtifÚTriggerOrderType)Ú	triggerPxÚisMarketÚtpslÚTriggerOrderTypeWireÚ	OrderType)ÚlimitÚtriggerF)ÚtotalÚOrderTypeWireÚOrderRequest)ÚcoinÚis_buyÚszÚlimit_pxÚ
order_typeÚreduce_onlyÚcloidÚModifyRequest)ÚoidÚorderÚCancelRequest)r   r'   ÚCancelByCloidRequest)r   r%   ÚnaÚ
normalTpslÚpositionTpslÚOrder)ÚassetÚisBuyÚlimitPxr!   Ú
reduceOnlyr%   Ú	OrderWire)ÚaÚbÚpÚsÚrÚtÚcÚ
ModifyWireÚScheduleCancelActionÚscheduleCancel)ÚtypeÚtimeÚhyperliquidChainÚstring©Únamer>   ÚdestinationÚamountr?   Úuint64ÚtokenÚtoPerpÚboolÚnonceÚ	sourceDexÚdestinationDexÚfromSubAccountÚ	validatorÚaddressÚweiÚisUndelegateÚsignersÚmultiSigActionHashÚbytes32r#   Úreturnc                 C   sR   d| v r
d| d iS d| v r$d| d d t | d d ƒ| d d dœiS td| ƒ‚)Nr   r   r   r   r   )r   r   r   zInvalid order type)Úfloat_to_wireÚ
ValueError)r#   © rX   úf/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/hyperliquid/utils/signing.pyÚorder_type_to_wire‹   s   

ýÿ
rZ   c                 C   s"   t  |  d¡r| dd … ¡S | ¡S )NÚ0xé   )ÚbytesÚfromhexÚ
startswith)rO   rX   rX   rY   Úaddress_to_bytes™   s   "r`   c                 C   sh   t  | ¡}|| dd¡7 }|d u r|d7 }n
|d7 }|t|ƒ7 }|d ur0|d7 }|| dd¡7 }t|ƒS )Né   Úbigó    ó   )ÚmsgpackÚpackbÚto_bytesr`   r   )ÚactionÚvault_addressrJ   Úexpires_afterÚdatarX   rX   rY   Úaction_hash�   s   

rl   c                 C   s   |rd| dœS d| dœS )Nr4   r5   )ÚsourceÚconnectionIdrX   )ÚhashÚ
is_mainnetrX   rX   rY   Úconstruct_phantom_agent«   s   rq   c                 C   sN   dddddœdddœd	d
dœgdddœdddœdddœdddœgdœd| dœS )Ni9  ÚExchangeÚ*0x0000000000000000000000000000000000000000Ú1)ÚchainIdrC   ÚverifyingContractÚversionrm   rA   rB   rn   rT   rC   rw   ru   Úuint256rv   rO   )ÚAgentÚEIP712Domainry   ©ÚdomainÚtypesÚprimaryTypeÚmessagerX   )Úphantom_agentrX   rX   rY   Ú
l1_payload¯   s"   üþüûìr�   c              
   C   sN   t |d dƒ}dd|ddœ| |ddd	d
œdd	d
œddd
œddd
œgi| |dœS )NÚsignatureChainIdé   ÚHyperliquidSignTransactionrt   rs   )rC   rw   ru   rv   rz   rC   rA   rB   rw   ru   rx   rv   rO   r{   )Úint)Úprimary_typeÚpayload_typesrh   Úchain_idrX   rX   rY   Úuser_signed_payloadÈ   s"   üüþ	ïr‰   c           	      C   s*   t ||||ƒ}t||ƒ}t|ƒ}t| |ƒS ©N)rl   rq   r�   Ú
sign_inner)	Úwalletrh   Úactive_poolrJ   rj   rp   ro   r€   rk   rX   rX   rY   Úsign_l1_actionß   s   

rŽ   c                 C   s.   d|d< |rdnd|d< t |||ƒ}t| |ƒS )NÚ0x66eeer‚   ÚMainnetÚTestnetr@   )r‰   r‹   )rŒ   rh   r‡   r†   rp   rk   rX   rX   rY   Úsign_user_signed_actionæ   s   
r’   c                 C   s\   g }d}| D ]}|  |¡ |d dkr%d}|  dddœ¡ |  dddœ¡ q|s,td	ƒ |S )
NFrC   r@   TÚpayloadMultiSigUserrO   rB   ÚouterSignerzd"hyperliquidChain" missing from sign_types. sign_types was not enriched with multi-sig signing types)ÚappendÚprint)Ú
sign_typesÚenriched_sign_typesÚenrichedÚ	sign_typerX   rX   rY   Úadd_multi_sig_typesï   s(   
þÿþÿ€r›   c                 C   s$   |   ¡ } | ¡ | d< | ¡ | d< | S )Nr“   r”   )ÚcopyÚlower)rh   Úpayload_multi_sig_userÚouter_signerrX   rX   rY   Úadd_multi_sig_fields  s   r    c                 C   s$   t |||ƒ}t|ƒ}t| ||||ƒS rŠ   )r    r›   r’   )rŒ   rh   rp   r—   Útx_typerž   rŸ   ÚenveloperX   rX   rY   Ú)sign_multi_sig_user_signed_action_payload  s   ûr£   c           	      C   s$   |  ¡ |  ¡ |g}t| |||||ƒS rŠ   )r�   rŽ   )	rŒ   rh   rp   ri   Ú	timestamprj   rž   rŸ   r¢   rX   rX   rY   Ú sign_multi_sig_l1_action_payload  s   úr¥   c           	      C   s6   |  ¡ }|d= t||||ƒ}||dœ}t| |td|ƒS )Nr>   )rS   rJ   z#HyperliquidTransaction:SendMultiSig)rœ   rl   r’   ÚMULTI_SIG_ENVELOPE_SIGN_TYPES)	rŒ   rh   rp   ri   rJ   rj   Úaction_without_tagÚmulti_sig_action_hashr¢   rX   rX   rY   Úsign_multi_sig_action*  s   þûr©   c                 C   ó   t | |td|ƒS )NzHyperliquidTransaction:UsdSend)r’   ÚUSD_SEND_SIGN_TYPES©rŒ   rh   rp   rX   rX   rY   Úsign_usd_transfer_action;  ó   ûr­   c                 C   rª   )NzHyperliquidTransaction:SpotSend)r’   ÚSPOT_TRANSFER_SIGN_TYPESr¬   rX   rX   rY   Úsign_spot_transfer_actionE  r®   r°   c                 C   rª   )NzHyperliquidTransaction:Withdraw)r’   ÚWITHDRAW_SIGN_TYPESr¬   rX   rX   rY   Ú sign_withdraw_from_bridge_actionO  r®   r²   c                 C   rª   )Nz'HyperliquidTransaction:UsdClassTransfer)r’   ÚUSD_CLASS_TRANSFER_SIGN_TYPESr¬   rX   rX   rY   Úsign_usd_class_transfer_actionY  r®   r´   c                 C   rª   )Nz HyperliquidTransaction:SendAsset)r’   ÚSEND_ASSET_SIGN_TYPESr¬   rX   rX   rY   Úsign_send_asset_actionc  r®   r¶   c                 C   rª   )Nz,HyperliquidTransaction:ConvertToMultiSigUser)r’   Ú$CONVERT_TO_MULTI_SIG_USER_SIGN_TYPESr¬   rX   rX   rY   Ú%sign_convert_to_multi_sig_user_actionm  r®   r¸   c              	   C   s0   t | |dddœdddœdddœdddœgd	|ƒS )
Nr@   rA   rB   ÚagentAddressrO   Ú	agentNamerJ   rF   z#HyperliquidTransaction:ApproveAgent©r’   r¬   rX   rX   rY   Ú
sign_agentw  ó   üör¼   c              	   C   s0   t | |dddœdddœdddœdddœgd	|ƒS )
Nr@   rA   rB   Ú
maxFeeRateÚbuilderrO   rJ   rF   z(HyperliquidTransaction:ApproveBuilderFeer»   r¬   rX   rX   rY   Úsign_approve_builder_fee†  r½   rÀ   c                 C   rª   )Nz$HyperliquidTransaction:TokenDelegate)r’   ÚTOKEN_DELEGATE_TYPESr¬   rX   rX   rY   Úsign_token_delegate_action•  r®   rÂ   c                 C   s4   t |d�}|  |¡}t|d ƒt|d ƒ|d dœS )N©Úfull_messager8   r7   Úv)r8   r7   rÅ   )r   Úsign_messager   )rŒ   rk   Ústructured_dataÚsignedrX   rX   rY   r‹   Ÿ  s   

 r‹   c                 C   sN   t | |||ƒ}t||ƒ}t|ƒ}t|d�}	tj|	|d |d |d gd�}
|
S )NrÃ   rÅ   r8   r7   ©Úvrs)rl   rq   r�   r   r   Úrecover_message)rh   Ú	signaturer�   rJ   rj   rp   ro   r€   rk   rÇ   rO   rX   rX   rY   Ú$recover_agent_or_user_from_l1_action¥  s   

 rÍ   c                 C   sJ   |rdnd| d< t ||| ƒ}t|d�}tj||d |d |d gd�}|S )	Nr�   r‘   r@   rÃ   rÅ   r8   r7   rÉ   )r‰   r   r   rË   )rh   rÌ   r‡   r†   rp   rk   rÇ   rO   rX   rX   rY   Ú$recover_user_from_user_signed_action®  s
   
 rÎ   Úxc                 C   sF   | d›}t t|ƒ|  ƒdkrtd| ƒ‚|dkrd}t|ƒ ¡ }|d›S )Nz.8fgê-�™—q=zfloat_to_wire causes roundingz-0Ú0Úf)ÚabsÚfloatrW   r   Ú	normalize)rÏ   ÚroundedÚ
normalizedrX   rX   rY   rV   ¶  s   
rV   c                 C   ó
   t | dƒS )Nra   ©Úfloat_to_int©rÏ   rX   rX   rY   Úfloat_to_int_for_hashingÀ  ó   
rÛ   c                 C   r×   )Né   rØ   rÚ   rX   rX   rY   Úfloat_to_usd_intÄ  rÜ   rÞ   Úpowerc                 C   s6   | d|  }t t|ƒ| ƒdkrtd| ƒ‚t|ƒ}|S )Né
   gü©ñÒMbP?zfloat_to_int causes rounding)rÒ   ÚroundrW   )rÏ   rß   Úwith_decimalsÚresrX   rX   rY   rÙ   È  s
   
rÙ   c                   C   s   t t ¡ d ƒS )Niè  )r…   r?   rX   rX   rX   rY   Úget_timestamp_msÐ  s   rä   r(   r/   c                 C   sZ   || d t | d ƒt | d ƒ| d t| d ƒdœ}d| v r+| d d ur+| d  ¡ |d< |S )	Nr    r"   r!   r$   r#   )r4   r5   r6   r7   r8   r9   r%   r:   )rV   rZ   Úto_raw)r(   r/   Ú
order_wirerX   rX   rY   Úorder_request_to_order_wireÔ  s   


úrç   c                 C   s   d| ddœ}|r||d< |S )Nr(   r+   )r>   ÚordersÚgroupingr¿   rX   )Úorder_wiresr¿   rh   rX   rX   rY   Úorder_wires_to_order_actionâ  s   ýrë   rŠ   )Or?   Údecimalr   re   Úeth_accountr   Úeth_account.messagesr   Ú	eth_utilsr   r   Úhyperliquid.utils.typesr   r   r	   r
   r   r   ÚTifÚTpslr   rÓ   rI   r   Ústrr   r   r   r   r…   Ú
OidOrCloidr&   r)   r*   ÚGroupingr.   r3   r;   r<   r«   r¯   r±   r³   rµ   rÁ   r·   r¦   rZ   r`   rl   rq   r�   r‰   rŽ   r’   r›   r    r£   r¥   r©   r­   r°   r²   r´   r¶   r¸   r¼   rÀ   rÂ   r‹   rÍ   rÎ   rV   rÛ   rÞ   rÙ   rä   rç   rë   rX   rX   rX   rY   Ú<module>   s    
ù	õþúÿ
ùþþþ
þþ	üû	üüøû	ýý	






	
