
    (i                         U d dl mZ d dlmZ d dlmZmZm	Z	m
ZmZ ddlmZmZmZmZmZ ddlm
Z
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  eddd
       eddd       ed
dd       eddd      dZ e!eef   e"d<    G d d      Zy)    )OrderBuilder)Signer)EOA	OrderDataSignedOrderBUYSELL   )to_token_decimals
round_downround_normaldecimal_placesround_up)r   r	      )get_contract_config)	OrderArgsCreateOrderOptionsTickSizeRoundConfigMarketOrderArgsOrderSummary	OrderType   )pricesizeamount         )z0.1z0.01z0.001z0.0001ROUNDING_CONFIGc                       e Zd ZddefdZdedededefdZded	ededefd
Z	de
dedefdZdededefdZdee   dededefdZdee   dededefdZy)r   Nsignerc                     || _         ||nt        | _        ||| _        y | j                   j                         | _        y )N)r"   r   sig_typeaddressfunder)selfr"   r$   r&   s       U/var/www/br/venv/lib/python3.12/site-packages/py_clob_client/order_builder/builder.py__init__zOrderBuilder.__init__(   s:     %-$8c
 !' 2f8K8K8M    sider   r   round_configc                    t        ||j                        }|t        k(  rt        ||j                        }||z  }t        |      |j                  kD  rGt        ||j                  dz         }t        |      |j                  kD  rt        ||j                        }t        |      }t        |      }	t        ||	fS |t        k(  rt        ||j                        }||z  }t        |      |j                  kD  rGt        ||j                  dz         }t        |      |j                  kD  rt        ||j                        }t        |      }t        |      }	t        ||	fS t        dt         dt         d      Nr   zorder_args.side must be 'z' or ''r   r   r   r   r   r   r   r   r   UtilsBuyr	   	UtilsSell
ValueError)
r'   r+   r   r   r,   	raw_priceraw_taker_amtraw_maker_amtmaker_amounttaker_amounts
             r(   get_order_amountszOrderBuilder.get_order_amounts3   sW    !(:(:;	3;&t\->->?M)I5Mm,|/B/BB (8K8Ka8O P!-0<3F3FF$.}l>Q>Q$RM,];L,];L\<77T\&t\->->?M)I5Mm,|/B/BB (8K8Ka8O P!-0<3F3FF$.}l>Q>Q$RM,];L,];LlL888VD6KLLr*   r   c                    t        ||j                        }|t        k(  rt        ||j                        }||z  }t        |      |j                  kD  rGt        ||j                  dz         }t        |      |j                  kD  rt        ||j                        }t        |      }t        |      }	t        ||	fS |t        k(  rt        ||j                        }||z  }t        |      |j                  kD  rGt        ||j                  dz         }t        |      |j                  kD  rt        ||j                        }t        |      }t        |      }	t        ||	fS t        dt         dt         d      r.   r0   )
r'   r+   r   r   r,   r4   r6   r5   r7   r8   s
             r(   get_market_order_amountsz%OrderBuilder.get_market_order_amountsU   sW    !(:(:;	3;&v|/@/@AM)I5Mm,|/B/BB (8K8Ka8O P!-0<3F3FF$.}l>Q>Q$RM,];L,];L\<77T\&v|/@/@AM)I5Mm,|/B/BB (8K8Ka8O P!-0<3F3FF$.}l>Q>Q$RM,];L,];LlL888VD6KLLr*   
order_argsoptionsreturnc                    | j                  |j                  |j                  |j                  t        |j
                           \  }}}t        | j                  |j                  |j                  t        |      t        |      |t        |j                        t        |j                        | j                  j                         t        |j                        | j                         }t#        | j                  j%                         |j&                        }t)        |j*                  | j                  j%                         t-        | j                  j.                              }|j1                  |      S )z,
        Creates and signs an order
        makertakertokenIdmakerAmounttakerAmountr+   
feeRateBpsnoncer"   
expirationsignatureTypekey)r9   r+   r   r   r    	tick_sizer   r&   rB   token_idstrfee_rate_bpsrG   r"   r%   rH   r$   r   get_chain_idneg_riskUtilsOrderBuilderexchangeUtilsSignerprivate_keybuild_signed_order	r'   r<   r=   r+   r7   r8   datacontract_configorder_builders	            r(   create_orderzOrderBuilder.create_orderw   s'    ,0+A+AOOOOG--.	,
(lL ++""''L)L):223j&&';;&&(:001--
 .KK$$&(8(8
 *$$KK$$&DKK334
 //55r*   c                    | j                  |j                  |j                  |j                  t        |j
                           \  }}}t        | j                  |j                  |j                  t        |      t        |      |t        |j                        t        |j                        | j                  j                         d| j                        }t!        | j                  j#                         |j$                        }t'        |j(                  | j                  j#                         t+        | j                  j,                              }|j/                  |      S )z2
        Creates and signs a market order
        0r@   rJ   )r;   r+   r   r   r    rL   r   r&   rB   rM   rN   rO   rG   r"   r%   r$   r   rP   rQ   rR   rS   rT   rU   rV   rW   s	            r(   create_market_orderz OrderBuilder.create_market_order   s    ,0+H+HOOG--.	,
(lL ++""''L)L):223j&&';;&&(--
 .KK$$&(8(8
 *$$KK$$&DKK334
 //55r*   	positionsamount_to_match
order_typec                 @   |st        d      d}t        |      D ]L  }|t        |j                        t        |j                        z  z  }||k\  s7t        |j                        c S  |t
        j                  k(  rt        d      t        |d   j                        S Nzno matchr   	Exceptionreversedfloatr   r   r   FOKr'   r_   r`   ra   sumps         r(   calculate_buy_market_pricez'OrderBuilder.calculate_buy_market_price   s     J'')$ 	&A5=5>11Co%QWW~%	&
 &J''Yq\''((r*   c                    |st        d      d}t        |      D ]6  }|t        |j                        z  }||k\  s!t        |j                        c S  |t
        j                  k(  rt        d      t        |d   j                        S rc   rd   ri   s         r(   calculate_sell_market_pricez(OrderBuilder.calculate_sell_market_price   s     J'')$ 	&A5= Co%QWW~%	&
 &J''Yq\''((r*   )NN)__name__
__module____qualname__r   r)   rN   rg   r   r9   r;   r   r   r   r[   r   r^   listr   r   rl   rn    r*   r(   r   r   '   s   	Nv 	N M M$ M-2 MBM MD M M!& M/4 MDO MD%6#%6.@%6	%6N%6)%64F%6	%6N)%) ) 	)
 
)()%) ) 	)
 
)r*   r   N)#py_order_utils.buildersr   rR   py_order_utils.signerr   rT   py_order_utils.modelr   r   r   r   r1   r	   r2   helpersr   r   r   r   r   	constantsconfigr   r"   
clob_typesr   r   r   r   r   r   r   r    dict__annotations__rs   r*   r(   <module>r}      s    E 7   ! (    QQq1aa2qq3!4	0h+, D) D)r*   