a
E�tbB � @ s d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z d dl
mZ d d l
mZ d d
l
m
Z
d dl
mZ d dl
mZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ e je jd�Ze je jd�Zedg d��ZG dd� de�ZdS )� N)�
namedtuple)�COLLATERAL_ASSET)�!COLLATERAL_ASSET_ID_BY_NETWORK_ID)�ORDER_SIDE_BUY)�SYNTHETIC_ASSET_ID_MAP)�SYNTHETIC_ASSET_MAP)�ONE_HOUR_IN_SECONDS)�ORDER_FIELD_BIT_LENGTHS)�ORDER_PADDING_BITS)�ORDER_PREFIX)�'ORDER_SIGNATURE_EXPIRATION_BUFFER_HOURS)�nonce_from_client_id)�to_quantums_exact)�to_quantums_round_down)�to_quantums_round_up)�Signable)�get_hash)�rounding�StarkwareOrder�Z
order_type�asset_id_synthetic�asset_id_collateral�asset_id_fee�quantums_amount_synthetic�quantums_amount_collateral�quantums_amount_fee�is_buying_synthetic�position_id�nonce�expiration_epoch_hoursc s, e Zd Z� fdd�Zdd� Zdd� Z� ZS )�
SignableOrderc
s� t | }
t|
}t| }|tk}
t||
�}|
rRt�t�|�t�|��}t |t
�}n"t�t�|�t�|��}t|t
�}t�
t�|�t�d��}t�||�jtd�}t�t| �t �t }td|||||t|�|
t|�t|�|d�}tt| ��||� d S )Nz0.000001)�contextZLIMIT_ORDER_WITH_FEESr )r r r r r �DECIMAL_CONTEXT_ROUND_UP�multiply�decimal�Decimalr r �DECIMAL_CONTEXT_ROUND_DOWNr �quantize�to_integral_value�math�ceil�floatr r r �intr
�superr �__init__)�self�
network_idZmarketZsider Z
human_sizeZhuman_priceZ limit_feeZ client_idZexpiration_epoch_secondsZsynthetic_assetZsynthetic_asset_idZcollateral_asset_idr r Z
human_costr Zlimit_fee_roundedZquantums_amount_fee_decimalr �message�� __class__� �q/Users/okudajunta/Library/Mobile Documents/com~apple~CloudDocs/solidity/dydx-v3-rust/./src/stark/starkex/order.pyr. . sl ����� ���
���
zSignableOrder.__init__c C s | j S )N)�_message)r/ r4 r4 r5 �to_starkware} s zSignableOrder.to_starkwarec C s | j jr*| j j}| j j}| j j}| j j}n | j j}| j j}| j j}| j j}|}|td K }||7 }|td K }|| j j7 }|td K }|| j j7 }t }t
d�D ]}|td K }|| j j7 }q�|td K }|| j j7 }|t
K }tt||�| j j�}tt||�|�S )z*Calculate the hash of the Starkware order.Zquantums_amountr � r r )r6 r r r r r r r r r �ranger r r
r r ) r/ Z
asset_id_sellZasset_id_buyZquantums_amount_sellZquantums_amount_buyZpart_1Zpart_2�_Zassets_hashr4 r4 r5 �_calculate_hash� sJ
����zSignableOrder._calculate_hash)�__name__�
__module__�__qualname__r. r7 r; �
__classcell__r4 r4 r2 r5 r , s Or ) r$ r) �collectionsr Zdydx_constantsr r r r r Zstarkex.constantsr r r
r r Zstarkex.helpersr
r r r Zstarkex.signabler Zstarkex.starkex_resources.proxyr �Context�
ROUND_DOWNr&