extract transaction creation function
This commit is contained in:
parent
47fa3ecded
commit
b9dabc27c2
189
src/main.rs
189
src/main.rs
|
@ -187,6 +187,102 @@ fn seconds_since(dt: DateTime<Utc>) -> i64 {
|
|||
Utc::now().signed_duration_since(dt).num_seconds()
|
||||
}
|
||||
|
||||
fn create_ask_bid_transaction(
|
||||
c: &PerpMarketCache,
|
||||
mango_account_pk: Pubkey,
|
||||
mango_account_signer_pk: Pubkey,
|
||||
) -> Transaction {
|
||||
let offset = rand::random::<i8>() as i64;
|
||||
let spread = rand::random::<u8>() as i64;
|
||||
debug!(
|
||||
"price:{:?} price_quote_lots:{:?} order_base_lots:{:?} offset:{:?} spread:{:?}",
|
||||
c.price, c.price_quote_lots, c.order_base_lots, offset, spread
|
||||
);
|
||||
let cancel_ix: Instruction = serde_json::from_str(
|
||||
&serde_json::to_string(
|
||||
&cancel_all_perp_orders(
|
||||
&pk_from_str_like(&c.mango_program_pk),
|
||||
&pk_from_str_like(&c.mango_group_pk),
|
||||
&pk_from_str_like(&mango_account_pk),
|
||||
&(pk_from_str_like(&mango_account_signer_pk)),
|
||||
&(pk_from_str_like(&c.perp_market_pk)),
|
||||
&c.perp_market.bids,
|
||||
&c.perp_market.asks,
|
||||
10,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let place_bid_ix: Instruction = serde_json::from_str(
|
||||
&serde_json::to_string(
|
||||
&place_perp_order2(
|
||||
&pk_from_str_like(&c.mango_program_pk),
|
||||
&pk_from_str_like(&c.mango_group_pk),
|
||||
&pk_from_str_like(&mango_account_pk),
|
||||
&(pk_from_str_like(&mango_account_signer_pk)),
|
||||
&pk_from_str_like(&c.mango_cache_pk),
|
||||
&(pk_from_str_like(&c.perp_market_pk)),
|
||||
&c.perp_market.bids,
|
||||
&c.perp_market.asks,
|
||||
&c.perp_market.event_queue,
|
||||
None,
|
||||
&[],
|
||||
Side::Bid,
|
||||
c.price_quote_lots + offset - spread,
|
||||
c.order_base_lots,
|
||||
i64::MAX,
|
||||
1,
|
||||
mango::matching::OrderType::Limit,
|
||||
false,
|
||||
None,
|
||||
64,
|
||||
mango::matching::ExpiryType::Absolute,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let place_ask_ix: Instruction = serde_json::from_str(
|
||||
&serde_json::to_string(
|
||||
&place_perp_order2(
|
||||
&pk_from_str_like(&c.mango_program_pk),
|
||||
&pk_from_str_like(&c.mango_group_pk),
|
||||
&pk_from_str_like(&mango_account_pk),
|
||||
&(pk_from_str_like(&mango_account_signer_pk)),
|
||||
&pk_from_str_like(&c.mango_cache_pk),
|
||||
&(pk_from_str_like(&c.perp_market_pk)),
|
||||
&c.perp_market.bids,
|
||||
&c.perp_market.asks,
|
||||
&c.perp_market.event_queue,
|
||||
None,
|
||||
&[],
|
||||
Side::Ask,
|
||||
c.price_quote_lots + offset + spread,
|
||||
c.order_base_lots,
|
||||
i64::MAX,
|
||||
2,
|
||||
mango::matching::OrderType::Limit,
|
||||
false,
|
||||
None,
|
||||
64,
|
||||
mango::matching::ExpiryType::Absolute,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
Transaction::new_unsigned(Message::new(
|
||||
&[cancel_ix, place_bid_ix, place_ask_ix],
|
||||
Some(&mango_account_signer_pk),
|
||||
))
|
||||
}
|
||||
|
||||
fn send_mm_transactions(
|
||||
quotes_per_second: u64,
|
||||
perp_market_caches: &Vec<PerpMarketCache>,
|
||||
|
@ -200,97 +296,8 @@ fn send_mm_transactions(
|
|||
// update quotes 2x per second
|
||||
for _ in 0..quotes_per_second {
|
||||
for c in perp_market_caches.iter() {
|
||||
let offset = rand::random::<i8>() as i64;
|
||||
let spread = rand::random::<u8>() as i64;
|
||||
debug!(
|
||||
"price:{:?} price_quote_lots:{:?} order_base_lots:{:?} offset:{:?} spread:{:?}",
|
||||
c.price, c.price_quote_lots, c.order_base_lots, offset, spread
|
||||
);
|
||||
|
||||
let cancel_ix: Instruction = serde_json::from_str(
|
||||
&serde_json::to_string(
|
||||
&cancel_all_perp_orders(
|
||||
&pk_from_str_like(&c.mango_program_pk),
|
||||
&pk_from_str_like(&c.mango_group_pk),
|
||||
&pk_from_str_like(&mango_account_pk),
|
||||
&(pk_from_str_like(&mango_account_signer.pubkey())),
|
||||
&(pk_from_str_like(&c.perp_market_pk)),
|
||||
&c.perp_market.bids,
|
||||
&c.perp_market.asks,
|
||||
10,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let place_bid_ix: Instruction = serde_json::from_str(
|
||||
&serde_json::to_string(
|
||||
&place_perp_order2(
|
||||
&pk_from_str_like(&c.mango_program_pk),
|
||||
&pk_from_str_like(&c.mango_group_pk),
|
||||
&pk_from_str_like(&mango_account_pk),
|
||||
&(pk_from_str_like(&mango_account_signer.pubkey())),
|
||||
&pk_from_str_like(&c.mango_cache_pk),
|
||||
&(pk_from_str_like(&c.perp_market_pk)),
|
||||
&c.perp_market.bids,
|
||||
&c.perp_market.asks,
|
||||
&c.perp_market.event_queue,
|
||||
None,
|
||||
&[],
|
||||
Side::Bid,
|
||||
c.price_quote_lots + offset - spread,
|
||||
c.order_base_lots,
|
||||
i64::MAX,
|
||||
1,
|
||||
mango::matching::OrderType::Limit,
|
||||
false,
|
||||
None,
|
||||
64,
|
||||
mango::matching::ExpiryType::Absolute,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let place_ask_ix: Instruction = serde_json::from_str(
|
||||
&serde_json::to_string(
|
||||
&place_perp_order2(
|
||||
&pk_from_str_like(&c.mango_program_pk),
|
||||
&pk_from_str_like(&c.mango_group_pk),
|
||||
&pk_from_str_like(&mango_account_pk),
|
||||
&(pk_from_str_like(&mango_account_signer.pubkey())),
|
||||
&pk_from_str_like(&c.mango_cache_pk),
|
||||
&(pk_from_str_like(&c.perp_market_pk)),
|
||||
&c.perp_market.bids,
|
||||
&c.perp_market.asks,
|
||||
&c.perp_market.event_queue,
|
||||
None,
|
||||
&[],
|
||||
Side::Ask,
|
||||
c.price_quote_lots + offset + spread,
|
||||
c.order_base_lots,
|
||||
i64::MAX,
|
||||
2,
|
||||
mango::matching::OrderType::Limit,
|
||||
false,
|
||||
None,
|
||||
64,
|
||||
mango::matching::ExpiryType::Absolute,
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let mut tx = Transaction::new_unsigned(Message::new(
|
||||
&[cancel_ix, place_bid_ix, place_ask_ix],
|
||||
Some(&mango_account_signer.pubkey()),
|
||||
));
|
||||
let mut tx =
|
||||
create_ask_bid_transaction(c, mango_account_pk, mango_account_signer.pubkey());
|
||||
|
||||
if let Ok(recent_blockhash) = blockhash.read() {
|
||||
tx.sign(&[mango_account_signer], *recent_blockhash);
|
||||
|
|
Loading…
Reference in New Issue