extract transaction creation function

This commit is contained in:
Kirill Lykov 2022-11-14 17:51:25 +01:00
parent 47fa3ecded
commit b9dabc27c2
1 changed files with 98 additions and 91 deletions

View File

@ -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);