Skip to content

Commit

Permalink
filter by ticker and add retry
Browse files Browse the repository at this point in the history
  • Loading branch information
tqin7 committed Feb 28, 2024
1 parent 68a67f3 commit 47bf20a
Showing 1 changed file with 41 additions and 14 deletions.
55 changes: 41 additions & 14 deletions scripts/validate-other-market-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -313,19 +313,24 @@ async function validateAgainstLocalnet(proposals: Proposal[]): Promise<void> {
}));

// Send proposals (unless a market with that ticker already exists).
const allClobPairs = await client.validatorClient.get.getAllClobPairs();
// allClobPairs.clobPair[0].
let marketId = allClobPairs.clobPair.reduce((max, clobPair) => clobPair.id > max ? clobPair.id : max, 0);
const allPerps = await client.validatorClient.get.getAllPerpetuals();
const allTickers = allPerps.perpetual.map((perp) => perp.params!.ticker);
let marketId = allPerps.perpetual.reduce((max, perp) => perp.params!.id > max ? perp.params!.id : max, 0);
let proposalId: Long = Long.fromInt(0);
const marketsProposed = new Map<number, Proposal>();
for (const proposal of proposals) {
if (allTickers.includes(proposal.params.ticker)) {
console.log(`Market with ticker ${proposal.params.ticker} already exists. Skipping proposal...`);
continue;
}

// Increment marketId and proposalId.
marketId++;
proposalId = proposalId.add(1);

// Send proposal.
const exchangeConfigString = `{"exchanges":${JSON.stringify(proposal.params.exchangeConfigJson)}}`;
const tx = await client.submitGovAddNewMarketProposal(
const tx = await retry(client.submitGovAddNewMarketProposal, [
wallets[0],
{
id: marketId,
Expand All @@ -344,22 +349,22 @@ async function validateAgainstLocalnet(proposals: Proposal[]): Promise<void> {
proposal.title,
proposal.summary,
MIN_DEPOSIT,
)
]);
console.log(`Tx to add market ${marketId} with ticker ${proposal.params.ticker}`, tx);

// Record proposed market.
marketsProposed.set(marketId, proposal);

// Wait 15 seconds for proposal to be processed.
await sleep(15000);
// Wait 10 seconds for proposal to be processed.
await sleep(10000);

// Vote YES on proposal.
for (const wallet of wallets) {
await voteOnProposal(proposalId, client, wallet);
retry(voteOnProposal, [proposalId, client, wallet]);
}

// Wait 15 seconds for votes to be processed.
await sleep(15000);
// Wait 10 seconds for votes to be processed.
await sleep(10000);
}

// Wait for voting period to end.
Expand Down Expand Up @@ -429,10 +434,6 @@ function validatePerpetual(perpetual: Perpetual, proposal: Proposal): void {
}
}

async function sleep(ms: number): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, ms));
}

function validateParamsSchema(proposal: Proposal): void {
const ajv = new Ajv();

Expand Down Expand Up @@ -488,6 +489,32 @@ function validateParamsSchema(proposal: Proposal): void {
}
}

async function sleep(ms: number): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, ms));
}

async function retry<T, Args extends any[]>(
func: (...args: Args) => Promise<T>,
args: Args,
maxRetries: number = 5,
retryDelay: number = 2000
): Promise<T> {
let attempt = 0;
while (attempt < maxRetries) {
try {
return await func(...args);
} catch (error) {
attempt++;
console.log(`Function ${func.name}, attempt ${attempt}, error ${error}. Retrying...`);
if (attempt >= maxRetries) {
throw new Error(`Function ${func.name} failed after ${maxRetries} attempts: ${error}`);
}
await sleep(retryDelay);
}
}
throw new Error(`Function ${func.name} failed after ${maxRetries} attempts.`);
}

async function main(): Promise<void> {
// Read proposals from json file.
const fileContent = readFileSync(PATH_TO_PROPOSALS, 'utf8');
Expand Down

0 comments on commit 47bf20a

Please sign in to comment.