From ba11c539f69c85baa918d117ed9d1242b0ade849 Mon Sep 17 00:00:00 2001 From: Filip Dunder Date: Sat, 27 Apr 2024 17:18:46 +0200 Subject: [PATCH] feat: filter cache --- filters/burn.filter.ts | 14 +++++++++++++- filters/mutable.filter.ts | 13 ++++++++++++- filters/renounced.filter.ts | 16 +++++++++++++++- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/filters/burn.filter.ts b/filters/burn.filter.ts index 226699f..6ec5dd0 100644 --- a/filters/burn.filter.ts +++ b/filters/burn.filter.ts @@ -4,13 +4,25 @@ import { LiquidityPoolKeysV4 } from '@raydium-io/raydium-sdk'; import { logger } from '../helpers'; export class BurnFilter implements Filter { + private cachedResult: FilterResult | undefined = undefined; + constructor(private readonly connection: Connection) {} async execute(poolKeys: LiquidityPoolKeysV4): Promise { + if (this.cachedResult) { + return this.cachedResult; + } + try { const amount = await this.connection.getTokenSupply(poolKeys.lpMint, this.connection.commitment); const burned = amount.value.uiAmount === 0; - return { ok: burned, message: burned ? undefined : "Burned -> Creator didn't burn LP" }; + const result = { ok: burned, message: burned ? undefined : "Burned -> Creator didn't burn LP" }; + + if (result.ok) { + this.cachedResult = result; + } + + return result; } catch (e: any) { if (e.code == -32602) { return { ok: true }; diff --git a/filters/mutable.filter.ts b/filters/mutable.filter.ts index 24aad5a..2debbfa 100644 --- a/filters/mutable.filter.ts +++ b/filters/mutable.filter.ts @@ -8,6 +8,7 @@ import { logger } from '../helpers'; export class MutableFilter implements Filter { private readonly errorMessage: string[] = []; + private cachedResult: FilterResult | undefined = undefined; constructor( private readonly connection: Connection, @@ -25,6 +26,10 @@ export class MutableFilter implements Filter { } async execute(poolKeys: LiquidityPoolKeysV4): Promise { + if (this.cachedResult) { + return this.cachedResult; + } + try { const metadataPDA = getPdaMetadataKey(poolKeys.baseMint); const metadataAccount = await this.connection.getAccountInfo(metadataPDA.publicKey, this.connection.commitment); @@ -47,7 +52,13 @@ export class MutableFilter implements Filter { message.push('has no socials'); } - return { ok: ok, message: ok ? undefined : `MutableSocials -> Token ${message.join(' and ')}` }; + const result = { ok: ok, message: ok ? undefined : `MutableSocials -> Token ${message.join(' and ')}` }; + + if (!mutable) { + this.cachedResult = result; + } + + return result; } catch (e) { logger.error({ mint: poolKeys.baseMint }, `MutableSocials -> Failed to check ${this.errorMessage.join(' and ')}`); } diff --git a/filters/renounced.filter.ts b/filters/renounced.filter.ts index 1894094..d9edf1a 100644 --- a/filters/renounced.filter.ts +++ b/filters/renounced.filter.ts @@ -6,6 +6,7 @@ import { logger } from '../helpers'; export class RenouncedFreezeFilter implements Filter { private readonly errorMessage: string[] = []; + private cachedResult: FilterResult | undefined = undefined; constructor( private readonly connection: Connection, @@ -22,6 +23,10 @@ export class RenouncedFreezeFilter implements Filter { } async execute(poolKeys: LiquidityPoolKeysV4): Promise { + if (this.cachedResult) { + return this.cachedResult; + } + try { const accountInfo = await this.connection.getAccountInfo(poolKeys.baseMint, this.connection.commitment); if (!accountInfo?.data) { @@ -42,7 +47,16 @@ export class RenouncedFreezeFilter implements Filter { message.push('freeze'); } - return { ok: ok, message: ok ? undefined : `RenouncedFreeze -> Creator can ${message.join(' and ')} tokens` }; + const result = { + ok: ok, + message: ok ? undefined : `RenouncedFreeze -> Creator can ${message.join(' and ')} tokens`, + }; + + if (result.ok) { + this.cachedResult = result; + } + + return result; } catch (e) { logger.error( { mint: poolKeys.baseMint },