lite-rpc/benches/create_n_users.bench.ts

80 lines
2.0 KiB
TypeScript
Raw Normal View History

import { Connection, Keypair } from '@solana/web3.js';
2023-01-07 01:55:12 -08:00
import * as splToken from "@solana/spl-token";
import * as fs from 'fs';
2023-01-07 01:55:12 -08:00
import * as os from 'os';
// number of users
const nbUsers = +process.argv[2];
2023-01-07 01:55:12 -08:00
// url
const url = process.argv.length > 3 ? process.argv[3] : "http://0.0.0.0:8899";
2023-01-07 01:55:12 -08:00
// outfile
const outFile = process.argv.length > 4 ? process.argv[4] : "out.json";
(async function main() {
console.log("Creating " + nbUsers + " Users on " + url + " out file " + outFile);
console.time('Time taken');
2023-01-07 01:55:12 -08:00
const connection = new Connection(url, 'confirmed');
const authority = Keypair.fromSecretKey(
2023-01-07 01:55:12 -08:00
Uint8Array.from(
JSON.parse(
process.env.KEYPAIR ||
2023-01-07 01:55:12 -08:00
fs.readFileSync(os.homedir() + '/.config/solana/id.json', 'utf-8'),
),
2023-01-07 01:55:12 -08:00
),
);
const userKps = Array(nbUsers).fill(0).map(() => Keypair.generate());
2023-01-07 01:55:12 -08:00
const mint = await splToken.createMint(
2023-01-07 01:55:12 -08:00
connection,
authority,
authority.publicKey,
null,
6,
);
const accounts = await Promise.all(userKps.map(async user => {
const account = await splToken.createAccount(
2023-01-07 01:55:12 -08:00
connection,
authority,
mint,
user.publicKey,
);
console.log("Account created");
2023-01-07 01:55:12 -08:00
await splToken.mintTo(
2023-01-07 01:55:12 -08:00
connection,
authority,
mint,
account,
2023-01-07 01:55:12 -08:00
authority,
1_000_000_000_000,
)
console.log("Account minted");
return account;
}));
console.timeLog('Time taken');
const users = userKps.map(x => ({
'publicKey': x.publicKey.toBase58(),
'secretKey': Array.from(x.secretKey)
}));
2023-01-07 01:55:12 -08:00
const data = {
'users': users,
'tokenAccounts': accounts,
'mint': mint,
'minted_amount': 1_000_000_000_000
2023-01-07 01:55:12 -08:00
};
console.log('created ' + nbUsers + ' Users and minted 10^12 tokens for mint ' + mint);
fs.writeFileSync(outFile, JSON.stringify(data));
})()