From a34a60978679a977e466070e704231260b491242 Mon Sep 17 00:00:00 2001 From: Theo Brigitte Date: Sun, 21 Apr 2024 15:37:30 +0200 Subject: [PATCH] add mutable.filter.ts file --- filters/mutable.filter.ts | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 filters/mutable.filter.ts diff --git a/filters/mutable.filter.ts b/filters/mutable.filter.ts new file mode 100644 index 0000000..6a6b9b3 --- /dev/null +++ b/filters/mutable.filter.ts @@ -0,0 +1,28 @@ +import { Filter, FilterResult } from './pool-filters'; +import { Connection, PublicKey } from '@solana/web3.js'; +import { LiquidityPoolKeysV4 } from '@raydium-io/raydium-sdk'; +import { getPdaMetadataKey } from '@raydium-io/raydium-sdk'; +import { getMetadataAccountDataSerializer, MetadataAccountData } from '@metaplex-foundation/mpl-token-metadata'; +import { logger } from '../helpers'; + +export class MutableFilter implements Filter { + constructor(private readonly connection: Connection) {} + + async execute(poolKeys: LiquidityPoolKeysV4): Promise { + try { + const metadataPDA = getPdaMetadataKey(poolKeys.baseMint); + const metadataAccount = await this.connection.getAccountInfo(new PublicKey(metadataPDA.publicKey.toString())); + if (!metadataAccount?.data) { + return { ok: false, message: 'Mutable -> Failed to fetch account data' }; + } + const deserialize = getMetadataAccountDataSerializer().deserialize(metadataAccount.data); + const mutable = deserialize[0].isMutable; + + return { ok: !mutable, message: !mutable ? undefined : "Mutable -> Creator can change metadata" }; + } catch (e: any) { + logger.error({ mint: poolKeys.baseMint }, `Mutable -> Failed to check if metadata are mutable`); + } + + return { ok: false, message: 'Mutable -> Failed to check if metadata are mutable' }; + } +}