Skip to content

Instantly share code, notes, and snippets.

@mgild
Last active May 15, 2024 05:20
Show Gist options
  • Save mgild/5fca5c30a85013870c6f4c63c2c28528 to your computer and use it in GitHub Desktop.
Save mgild/5fca5c30a85013870c6f4c63c2c28528 to your computer and use it in GitHub Desktop.
async fn get_accounts(client: &RpcClient, keys: Vec<Pubkey>) -> Result<HashMap<Pubkey, Account>> {
let account_datas: Vec<Option<Account>> = client
.get_multiple_accounts(&keys.clone())
.await
.map_err(|_| anyhow!("Failed to get inf SPool accounts"))?;
let mut data_map = HashMap::new();
for i in 0..keys.len() {
let key = &keys[i];
let account = &account_datas[i];
if let Some(account) = account {
data_map.insert(key.clone(), account.clone());
} else {
println!("Failed to get SPool required account {key}");
}
}
Ok(data_map)
}
#[tokio::test]
async fn sanctum_spool_test_quote() -> Result<()> {
let url = "https://api.mainnet-beta.solana.com";
let client = RpcClient::new(url.to_string());
let lst_state_list_pubkey = s_controller_lib::program::LST_STATE_LIST_ID;
let lst_state_list_account = client.get_account(&lst_state_list_pubkey).await?;
let SanctumLstList { sanctum_lst_list } = SanctumLstList::load();
let mut spool: SPoolJup = SPoolJup::from_lst_state_list_account(lst_state_list_pubkey, lst_state_list_account, &sanctum_lst_list)?;
let keys = spool.get_accounts_to_update();
let data_map = get_accounts(&client, keys).await?;
spool.update_full(&data_map)?;
let keys = spool.get_accounts_to_update();
let data_map = get_accounts(&client, keys).await?;
spool.update_full(&data_map)?;
let inf = Pubkey::from_str("5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm").unwrap();
let sol = Pubkey::from_str("So11111111111111111111111111111111111111112").unwrap();
let quote = spool.quote(&jupiter_amm_interface::QuoteParams {
amount: 1,
input_mint: inf,
output_mint: sol,
swap_mode: SwapMode::ExactIn,
})?;
println!("quote: {:#?}", quote);
Ok(())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment