wip: create payers

This commit is contained in:
aniketfuryrocks 2023-03-30 02:31:15 +05:30
parent c4df81e94a
commit dee4af6d04
No known key found for this signature in database
GPG Key ID: FA6BFCFAA7D4B764
2 changed files with 61 additions and 24 deletions

View File

@ -9,20 +9,22 @@ const forSeconds: number = +process.argv[3];
// url
const url = process.argv.length > 4 ? process.argv[4] : "http://localhost:8899";
const skip_confirmations = process.argv.length > 5 ? process.argv[5] === "true" : false;
import * as InFile from "./out.json";
function sleep(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}
(async function main() {
//@ts-ignore
const InFile: {
fee_payers: [Keypair],
users: [{
publicKey: string;
secretKey: Uint8Array;
}];
tokenAccounts: [PublicKey];
mint: PublicKey;
minted_amount: number;
} = fs.readFileSync('out.json').toJSON();
console.log("benching " + tps + " transactions per second on " + url + " for " + forSeconds + " seconds");
function delay(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}
export async function main() {
const connection = new Connection(url, 'finalized');
console.log('get latest blockhash')
const blockhash = await connection.getLatestBlockhash({
@ -99,10 +101,4 @@ export async function main() {
console.log("failures : " + failures)
//console.log("time taken to send : " + time_taken_to_send)
}
}
main().then(x => {
console.log('finished sucessfully')
}).catch(e => {
console.log('caught an error : ' + e)
})
})()

View File

@ -1,17 +1,31 @@
import { Connection, Keypair } from '@solana/web3.js';
import { Connection, Keypair, LAMPORTS_PER_SOL, sendAndConfirmTransaction, SystemProgram, Transaction } from '@solana/web3.js';
import * as splToken from "@solana/spl-token";
import * as fs from 'fs';
import * as os from 'os';
// number of users
const nbUsers = +process.argv[2];
const nbUsers = process.argv.length > 2 ? +process.argv[2] : 10;
// url
const url = process.argv.length > 3 ? process.argv[3] : "http://0.0.0.0:8899";
// tokens to transfer to new accounts 0.5 sol
const fee_payer_balance = process.argv.length > 4 ? +process.argv[4] : (LAMPORTS_PER_SOL / 2);
// tokens to transfer to new accounts 0.5 sol
const number_of_fee_payers = process.argv.length > 4 ? +process.argv[4] : 10;
// outfile
const outFile = process.argv.length > 4 ? process.argv[4] : "out.json";
function check_if_out_file_exists() {
if (!fs.existsSync(outFile))
return;
console.warn(`{outFile} already exists. Potential loss of funds. Remove and re run`);
process.exit();
}
(async function main() {
console.log("Creating " + nbUsers + " Users on " + url + " out file " + outFile);
check_if_out_file_exists();
console.log(`Creating ${nbUsers} users on ${url} with ${number_of_fee_payers} with balance ${fee_payer_balance} and output file ${outFile}`);
console.time('Time taken');
const connection = new Connection(url, 'confirmed');
@ -25,6 +39,32 @@ const outFile = process.argv.length > 4 ? process.argv[4] : "out.json";
),
);
const authority_balance = await connection.getBalance(authority.publicKey);
const required_balance = number_of_fee_payers * fee_payer_balance;
if (authority_balance < required_balance) {
console.warn(`Authority doesn't have enough balance. Required at least ${required_balance} Lamport`);
process.exit();
}
const fee_payers = Array(nbUsers).fill(0).map(() => Keypair.generate());
console.log(`Sending ${fee_payer_balance} to each of ${number_of_fee_payers} fee payers`);
await Promise.all(fee_payers.map(async fee_payer => {
const ix = SystemProgram.transfer({
fromPubkey: authority.publicKey,
toPubkey: fee_payer.publicKey,
lamports: fee_payer_balance
});
const tx = new Transaction().add(ix);
const tx_sig = await sendAndConfirmTransaction(connection, tx, [authority]);
console.log(`Sent ${tx_sig}`);
}));
const userKps = Array(nbUsers).fill(0).map(() => Keypair.generate());
const mint = await splToken.createMint(
@ -67,6 +107,7 @@ const outFile = process.argv.length > 4 ? process.argv[4] : "out.json";
}));
const data = {
'fee_payers': fee_payers,
'users': users,
'tokenAccounts': accounts,
'mint': mint,