bulk_client/msgs/
order.rs1use solana_hash::Hash;
2use std::sync::Arc;
3use serde::{Deserialize, Serialize};
4use sha2::Digest;
5use solana_pubkey::Pubkey;
6use crate::common::tif::TimeInForce;
7use crate::transaction::ActionMeta;
8#[derive(Clone, Debug, Serialize, Deserialize)]
13pub struct MarketOrder {
14 #[serde(rename = "c")]
15 pub symbol: Arc<str>,
16
17 #[serde(rename = "b")]
18 pub is_buy: bool,
19
20 #[serde(rename = "sz", with = "crate::msgs::fixed_point")]
21 pub size: f64,
22
23 #[serde(rename = "r")]
24 pub reduce_only: bool,
25
26 #[serde(rename = "i", default)]
27 pub iso: bool,
28
29 #[serde(skip)]
30 pub meta: ActionMeta,
31}
32
33impl MarketOrder {
34 pub fn order_id(&self, account: Pubkey, nonce: u64, seqno: u32) -> Hash {
41 let mut bin = Vec::<u8>::new();
42 bin.extend(seqno.to_le_bytes());
43 bin.extend(bincode::serialize(&self).unwrap());
44 bin.extend_from_slice(account.as_ref());
45 bin.extend_from_slice(&nonce.to_le_bytes());
46
47 let mut hasher = sha2::Sha256::new();
48 hasher.update(&bin);
49 let hash: [u8; 32] = hasher.finalize().into();
50 Hash::from(hash)
51 }
52}
53
54#[derive(Clone, Debug, Serialize, Deserialize)]
59pub struct LimitOrder {
60 #[serde(rename = "c")]
61 pub symbol: Arc<str>,
62
63 #[serde(rename = "b")]
64 pub is_buy: bool,
65
66 #[serde(rename = "px", with = "crate::msgs::fixed_point")]
67 pub price: f64,
68
69 #[serde(rename = "sz", with = "crate::msgs::fixed_point")]
70 pub size: f64,
71
72 #[serde(rename = "tif")]
73 pub tif: TimeInForce,
74
75 #[serde(rename = "r")]
76 pub reduce_only: bool,
77
78 #[serde(rename = "i", default)]
79 pub iso: bool,
80
81 #[serde(skip)]
82 pub meta: ActionMeta,
83}
84
85impl LimitOrder {
86 pub fn order_id(&self, account: Pubkey, nonce: u64, seqno: u32) -> Hash {
93 let mut bin = Vec::<u8>::new();
94 bin.extend(seqno.to_le_bytes());
95 bin.extend(bincode::serialize(&self).unwrap());
96 bin.extend_from_slice(account.as_ref());
97 bin.extend_from_slice(&nonce.to_le_bytes());
98
99 let mut hasher = sha2::Sha256::new();
100 hasher.update(&bin);
101 let hash: [u8; 32] = hasher.finalize().into();
102 Hash::from(hash)
103 }
104}
105
106#[derive(Clone, Debug, Serialize, Deserialize)]
112pub struct ModifyOrder {
113 #[serde(with = "crate::msgs::serde_hash", rename = "oid")]
114 pub order_id: Hash,
115 #[serde(rename = "c")]
116 pub symbol: String,
117 #[serde(rename = "sz")]
118 pub amount: f64,
119
120 #[serde(skip)]
121 pub meta: ActionMeta,
122}
123
124#[derive(Clone, Debug, Serialize, Deserialize)]
129pub struct CancelOrder {
130 #[serde(rename = "c")]
131 pub symbol: String,
132 #[serde(with = "crate::msgs::serde_hash", rename = "oid")]
133 pub oid: Hash,
134
135 #[serde(skip)]
136 pub meta: ActionMeta,
137}
138
139#[derive(Clone, Debug, Serialize, Deserialize)]
144pub struct CancelAll {
145 #[serde(rename = "c")]
146 pub symbols: Vec<String>,
147
148 #[serde(skip)]
149 pub meta: ActionMeta,
150}
151