From a9bc07d4be99f0b4d7ad3e135fbaa7c4d0c6f131 Mon Sep 17 00:00:00 2001 From: Milan Steiner Date: Wed, 16 Feb 2022 12:18:20 +0100 Subject: [PATCH] Using Map instead of an array --- packages/faucet/src/api/webserver.ts | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/faucet/src/api/webserver.ts b/packages/faucet/src/api/webserver.ts index 6b7fe928..86ef4750 100644 --- a/packages/faucet/src/api/webserver.ts +++ b/packages/faucet/src/api/webserver.ts @@ -14,14 +14,9 @@ export interface ChainConstants { readonly chainId: string; } -export interface AddressEntry { - address: string; - date: number; -} - export class Webserver { private readonly api = new Koa(); - private readonly addressCounter: AddressEntry[] = []; + private readonly addressCounter = new Map(); public constructor(faucet: Faucet, chainConstants: ChainConstants) { this.api.use(cors()); @@ -70,9 +65,9 @@ export class Webserver { throw new HttpError(400, "Address is not in the expected format for this chain."); } - const addressUsed = this.addressCounter.find((x) => x.address === address); - if (addressUsed !== undefined) { - if (addressUsed.date + 24 * 3600 > Date.now()) { + const entry: Date | undefined = this.addressCounter.get(address); + if (entry !== undefined) { + if (entry.getDate() + 24 * 3600 > Date.now()) { throw new HttpError( 405, "Too many request from the same address. Blocked to prevent draining. Please wait 24h and try it again!", @@ -80,7 +75,7 @@ export class Webserver { } } - const availableTokens = await faucet.availableTokens(); + const availableTokens: string[] = await faucet.availableTokens(); const matchingDenom = availableTokens.find((availableDenom) => availableDenom === denom); if (matchingDenom === undefined) { throw new HttpError(422, `Token is not available. Available tokens are: ${availableTokens}`); @@ -89,7 +84,7 @@ export class Webserver { try { await faucet.credit(address, matchingDenom); // Count addresses to prevent draining - this.addressCounter.push({ address: address, date: Date.now() }); + this.addressCounter.set(address, new Date()); } catch (e) { console.error(e); throw new HttpError(500, "Sending tokens failed");