2022-05-06 07:45:04 -07:00
|
|
|
use std::{sync::Arc, time::Duration};
|
2022-05-06 01:13:33 -07:00
|
|
|
|
|
|
|
use mango_v4::state::Bank;
|
|
|
|
|
2022-05-06 05:19:49 -07:00
|
|
|
use solana_sdk::{instruction::Instruction, pubkey::Pubkey};
|
2022-05-06 01:13:33 -07:00
|
|
|
use tokio::time;
|
|
|
|
|
|
|
|
use crate::MangoClient;
|
|
|
|
|
2022-05-06 07:45:04 -07:00
|
|
|
pub async fn loop_blocking(mango_client: Arc<MangoClient>, pk: Pubkey, bank: Bank) {
|
2022-05-06 01:13:33 -07:00
|
|
|
let mut interval = time::interval(Duration::from_secs(5));
|
|
|
|
loop {
|
|
|
|
interval.tick().await;
|
2022-05-06 07:45:04 -07:00
|
|
|
let client = mango_client.clone();
|
2022-05-06 01:13:33 -07:00
|
|
|
tokio::task::spawn_blocking(move || {
|
2022-05-06 07:45:04 -07:00
|
|
|
perform_operation(client, pk, bank).expect("Something went wrong here...");
|
2022-05-06 01:13:33 -07:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn perform_operation(
|
2022-05-06 07:45:04 -07:00
|
|
|
mango_client: Arc<MangoClient>,
|
2022-05-06 01:13:33 -07:00
|
|
|
pk: Pubkey,
|
|
|
|
bank: Bank,
|
|
|
|
) -> anyhow::Result<()> {
|
|
|
|
let sig_result = mango_client
|
|
|
|
.program()
|
|
|
|
.request()
|
|
|
|
.instruction(Instruction {
|
|
|
|
program_id: mango_v4::id(),
|
|
|
|
accounts: anchor_lang::ToAccountMetas::to_account_metas(
|
|
|
|
&mango_v4::accounts::UpdateIndex { bank: pk },
|
|
|
|
None,
|
|
|
|
),
|
|
|
|
data: anchor_lang::InstructionData::data(&mango_v4::instruction::UpdateIndex {}),
|
|
|
|
})
|
|
|
|
.send();
|
|
|
|
match sig_result {
|
|
|
|
Ok(sig) => {
|
2022-05-09 04:24:33 -07:00
|
|
|
log::info!(
|
2022-05-06 01:13:33 -07:00
|
|
|
"Crank: update_index for bank {:?} ix signature: {:?}",
|
|
|
|
format!("{: >6}", bank.name()),
|
|
|
|
sig
|
|
|
|
);
|
|
|
|
}
|
2022-05-06 07:45:04 -07:00
|
|
|
Err(e) => log::error!("Crank: {:?}", e),
|
2022-05-06 01:13:33 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
}
|