Compare commits

...

2 Commits

Author SHA1 Message Date
aniketfuryrocks e1dbb82779
limit on size 2023-07-02 17:59:14 +05:30
Aniket Prajapati f828cb7bce
Merge pull request #5 from blockworks-foundation/feature
Rust tests in series and other quality of life fixes
2023-06-28 15:12:59 +05:30
4 changed files with 40 additions and 12 deletions

View File

@ -8,6 +8,7 @@ import {
Commitment, Commitment,
Connection, Connection,
LAMPORTS_PER_SOL, LAMPORTS_PER_SOL,
PublicKey,
} from "@solana/web3.js"; } from "@solana/web3.js";
import { getKeypairFromFile } from "./common_utils"; import { getKeypairFromFile } from "./common_utils";
import { deploy_programs } from "./deploy_programs"; import { deploy_programs } from "./deploy_programs";
@ -277,6 +278,7 @@ async function configure(
market.quote_mint, market.quote_mint,
]) ])
.flat(); .flat();
const userAccountsList = userData const userAccountsList = userData
.map((user) => { .map((user) => {
const allOpenOrdersAccounts = user.open_orders const allOpenOrdersAccounts = user.open_orders
@ -286,13 +288,24 @@ async function configure(
return allOpenOrdersAccounts.concat(allTokenAccounts); return allOpenOrdersAccounts.concat(allTokenAccounts);
}) })
.flat(); .flat();
accounts = accounts.concat(marketAccountsList).concat(userAccountsList); accounts = accounts.concat(marketAccountsList).concat(userAccountsList);
console.log("Accounts created"); console.log("Accounts created");
const known_accounts = await Promise.all(accounts.map(async (account) => {
// get accountInfo as jsonParsed to get Size
let accountInfo = await connection.getParsedAccountInfo(account);
return [account,
// @ts-ignore
accountInfo.value.space
] as [PublicKey, number];
}));
let outputFile: OutputFile = { let outputFile: OutputFile = {
programs: programOutputData, programs: programOutputData,
known_accounts: accounts, known_accounts,
users: userData, users: userData,
mints, mints,
markets, markets,

View File

@ -17,7 +17,7 @@ export interface ProgramOutputData {
export interface OutputFile { export interface OutputFile {
users: User[]; users: User[];
programs: ProgramOutputData[]; programs: ProgramOutputData[];
known_accounts: PublicKey[]; known_accounts: [PublicKey, number][];
mints: PublicKey[]; mints: PublicKey[];
markets: Market[]; markets: Market[];
} }

View File

@ -78,7 +78,7 @@ pub struct Market {
#[derive(Serialize, Deserialize, Clone)] #[derive(Serialize, Deserialize, Clone)]
pub struct Config { pub struct Config {
pub programs: Vec<ProgramData>, pub programs: Vec<ProgramData>,
pub known_accounts: Vec<String>, pub known_accounts: Vec<(String, u32)>,
pub users: Vec<User>, pub users: Vec<User>,
pub mints: Vec<String>, pub mints: Vec<String>,
pub markets: Vec<Market>, pub markets: Vec<Market>,

View File

@ -19,8 +19,8 @@ const NB_OF_ACCOUNTS_FETCHED_PER_TASK: usize = 100;
pub struct AccountsFetchingTests; pub struct AccountsFetchingTests;
impl AccountsFetchingTests { impl AccountsFetchingTests {
pub fn create_random_address(count: usize) -> Vec<Pubkey> { pub fn create_random_address(count: usize) -> Vec<(Pubkey, u32)> {
(0..count).map(|_| Keypair::new().pubkey()).collect() (0..count).map(|_| (Keypair::new().pubkey(), 0)).collect()
} }
} }
@ -30,19 +30,19 @@ impl TestingTask for AccountsFetchingTests {
let accounts = config let accounts = config
.known_accounts .known_accounts
.iter() .iter()
.map(|x| Pubkey::from_str(x.as_str()).unwrap()) .map(|x| (Pubkey::from_str(&x.0).unwrap(), x.1))
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let unknown_accounts: Vec<Pubkey> =
AccountsFetchingTests::create_random_address(accounts.len()); let unknown_accounts = AccountsFetchingTests::create_random_address(accounts.len());
let instant = GetAccountsBench { let instant = GetAccountsBench {
accounts_list: Arc::new([accounts, unknown_accounts].concat()), accounts_list: Arc::new([accounts, unknown_accounts].concat()),
}; };
let metric = Bencher::bench::<GetAccountsBench>(instant, args).await?; let metric = Bencher::bench::<GetAccountsBench>(instant, args).await?;
Ok(metric) Ok(metric)
} }
fn get_name(&self) -> String { fn get_name(&self) -> String {
"Accounts Fetching".to_string() "Accounts Fetching".to_string()
} }
@ -50,7 +50,7 @@ impl TestingTask for AccountsFetchingTests {
#[derive(Clone)] #[derive(Clone)]
pub struct GetAccountsBench { pub struct GetAccountsBench {
accounts_list: Arc<Vec<Pubkey>>, accounts_list: Arc<Vec<(Pubkey, u32)>>,
} }
#[async_trait::async_trait] #[async_trait::async_trait]
@ -70,10 +70,25 @@ impl Benchmark for GetAccountsBench {
let accounts = self let accounts = self
.accounts_list .accounts_list
.iter() .iter()
.copied()
.choose_multiple(&mut rng, number_of_fetched_accounts); .choose_multiple(&mut rng, number_of_fetched_accounts);
rpc_client.raw_get_multiple_accounts(accounts).await // filter accounts whose account.1 value summing up to 10485760
let mut sum = 0;
let mut filtered_accounts = Vec::new();
for account in accounts.iter() {
let local_sum = sum + account.1;
// try maximise the number of accounts fetched
if local_sum <= 10485760 {
sum = local_sum;
filtered_accounts.push(account.0);
}
}
rpc_client
.raw_get_multiple_accounts(filtered_accounts)
.await
} }
Ok(()) Ok(())