
    %jA                        d dl mZ d dlmZ d dlmZ d dlZd dlmZm	Z	 d dl
mZ  G d de	          Z ed	
           G d d                      ZddZdddZ G d d          ZdS )    )annotations)	dataclass)DecimalN)AnyProtocol)build_hyperliquid_info_urlc                  &    e Zd Zd
dZd
dZddZd	S )InfoLikeaddressstrreturndict[str, Any]c                    d S N selfr   s     S/home/agent/projects/CryptoTradingBot/Crypto_Agent/src/hyperliquid/account_state.py
user_statezInfoLike.user_state             c                    d S r   r   r   s     r   spot_user_statezInfoLike.spot_user_state   r   r   list[dict[str, Any]]c                    d S r   r   r   s     r   open_orderszInfoLike.open_orders   r   r   Nr   r   r   r   r   r   r   r   )__name__
__module____qualname__r   r   r   r   r   r   r
   r
      s4        ====BBBBDDDDDDr   r
   T)frozenc                  |    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   edd            Zedd            ZdS )AccountStater   wallet_addressr   
usdc_total	usdc_holdunrealized_pnldict[str, dict[str, Any]]open_positionsaccount_valuer   c                     | j         | j        z
  S r   )r&   r'   )r   s    r   	free_usdczAccountState.free_usdc   s    //r   c                    | j         dk    r| j         n| j        }|dk    r| j        |z  t          d          z  nt          d          S )Nr   1000)r&   r+   r'   r   )r   bases     r   margin_usage_pctzAccountState.margin_usage_pct   sH    "&/A"5"5t4;M;?!88%66QTUr   N)r   r   )r   r    r!   __annotations__propertyr-   r2   r   r   r   r$   r$      s         ----0 0 0 X0 V V V XV V Vr   r$   r%   r   r   r   r   r   c           
        i }t          d          }|                    dg           D ]}|                    di           }t          t          |                    dd                              }|dk    rZt          |                    d                    }|||<   |t          t          |                    dd                              z  }t          d          }	t          d          }
|                    dg           D ]}}|                    d          d	k    rbt          t          |                    d
d                              }	t          t          |                    dd                              }
 n~|                    di           }t          t          |                    d|	|z                                 }t          | |	|
|||          S )Nr0   assetPositionspositionszir   coinunrealizedPnlbalancesUSDCtotalholdmarginSummaryaccountValue)r   getr   r$   )r%   r   r   	positions
unrealizedrowposr8   r9   r&   r'   balmargin_summaryr+   s                 r   parse_account_staterH   $   s   +-IJ~~.33 F Fggj"%%c#''%--..//!88swwv''D!IdO'#cggos&C&C"D"DEEEJJI"":r22  776??f$$ SWWWc%:%:!;!;<<JCGGFC$8$8 9 9::IE %  ^^OR88NC 2 2>:PZCZ [ [\\]]M
Iz9Vcdddr   env
str | Nonec                h    ddl m}  |t          |                               d          d          S )Nr   )Infoz/infoT)skip_ws)hyperliquid.inforL   r   removesuffix)rI   rL   s     r   build_info_clientrP   :   s@    %%%%%%4*3//<<WEEtTTTTr   c                  T    e Zd ZdZddd	ZddZddZddZddZddZ	ddZ
ddZdS )HyperliquidAccountStateClientzMRead-only account-state adapter around Hyperliquid Info. No Exchange imports.Ninfo_clientInfoLike | NonerI   rJ   r   Nonec                    |pt          j        d          pd                                | _        |pt	          | j                  | _        d S )N
CTB_HL_ENVmainnet)osgetenvlowerrI   rP   rS   )r   rS   rI   s      r   __init__z&HyperliquidAccountStateClient.__init__D   sG    ?29\22?iFFHH&E*;DH*E*Er   r   r   r   c                6    | j                             |          S r   )rS   r   r   s     r   get_user_statez,HyperliquidAccountStateClient.get_user_stateH   s    **7333r   c                6    | j                             |          S r   )rS   r   r   s     r   get_spot_user_statez1HyperliquidAccountStateClient.get_spot_user_stateK   s    //888r   r)   c                \    |                      |          }t          ||dg i          j        S )Nr;   )r^   rH   r*   )r   r   states      r   get_open_positionsz0HyperliquidAccountStateClient.get_open_positionsN   s/    ##G,,"7EJ3CDDSSr   r   c                6    | j                             |          S r   )rS   r   r   s     r   get_open_ordersz-HyperliquidAccountStateClient.get_open_ordersR   s    ++G444r   r   c                    |                      |          }|                    di           }t          t          |                    dd                              S )Nr?   r@   r0   )r^   rA   r   r   )r   r   rb   summarys       r   get_account_equityz0HyperliquidAccountStateClient.get_account_equityU   sL    ##G,,))OR00s7;;~s;;<<===r   c                    |                      |          }|                     |          }t          |||          j        S r   )r^   r`   rH   r-   r   r   userspots       r   get_free_usdcz+HyperliquidAccountStateClient.get_free_usdcZ   s=    ""7++''00"7D$77AAr   c                    |                      |          }|                     |          }t          |||          j        S r   )r^   r`   rH   r2   rj   s       r   get_margin_usagez.HyperliquidAccountStateClient.get_margin_usage_   s=    ""7++''00"7D$77HHr   )NN)rS   rT   rI   rJ   r   rU   r   )r   r   r   r)   r   )r   r   r   r   )r   r    r!   __doc__r\   r^   r`   rc   re   rh   rm   ro   r   r   r   rR   rR   A   s        WWF F F F F4 4 4 49 9 9 9T T T T5 5 5 5> > > >
B B B B
I I I I I Ir   rR   )r%   r   r   r   r   r   r   r$   r   )rI   rJ   r   r
   )
__future__r   dataclassesr   decimalr   rY   typingr   r   src.hyperliquid.market_datar   r
   r$   rH   rP   rR   r   r   r   <module>rv      s\   " " " " " " ! ! ! ! ! !       				                 B B B B B BE E E E Ex E E E $V V V V V V V V$e e e e,U U U U U!I !I !I !I !I !I !I !I !I !Ir   