12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { Connection } from '@solana/web3.js';
- import { LiquidityPoolKeysV4, Token, TokenAmount } from '@raydium-io/raydium-sdk';
- import { getMetadataAccountDataSerializer } from '@metaplex-foundation/mpl-token-metadata';
- import { BurnFilter } from './burn.filter';
- import { MutableFilter } from './mutable.filter';
- import { RenouncedFreezeFilter } from './renounced.filter';
- import { PoolSizeFilter } from './pool-size.filter';
- import { CHECK_IF_BURNED, CHECK_IF_FREEZABLE, CHECK_IF_MINT_IS_RENOUNCED, CHECK_IF_MUTABLE, logger } from '../helpers';
- export interface Filter {
- execute(poolKeysV4: LiquidityPoolKeysV4): Promise<FilterResult>;
- }
- export interface FilterResult {
- ok: boolean;
- message?: string;
- }
- export interface PoolFilterArgs {
- minPoolSize: TokenAmount;
- maxPoolSize: TokenAmount;
- quoteToken: Token;
- }
- export class PoolFilters {
- private readonly filters: Filter[] = [];
- constructor(
- readonly connection: Connection,
- readonly args: PoolFilterArgs,
- ) {
- if (CHECK_IF_BURNED) {
- this.filters.push(new BurnFilter(connection));
- }
- if (CHECK_IF_MINT_IS_RENOUNCED || CHECK_IF_FREEZABLE) {
- this.filters.push(new RenouncedFreezeFilter(connection, CHECK_IF_MINT_IS_RENOUNCED, CHECK_IF_FREEZABLE));
- }
- if (CHECK_IF_MUTABLE) {
- this.filters.push(new MutableFilter(connection, getMetadataAccountDataSerializer()));
- }
- if (!args.minPoolSize.isZero() || !args.maxPoolSize.isZero()) {
- this.filters.push(new PoolSizeFilter(connection, args.quoteToken, args.minPoolSize, args.maxPoolSize));
- }
- }
- public async execute(poolKeys: LiquidityPoolKeysV4): Promise<boolean> {
- if (this.filters.length === 0) {
- return true;
- }
- const result = await Promise.all(this.filters.map((f) => f.execute(poolKeys)));
- const pass = result.every((r) => r.ok);
- if (pass) {
- return true;
- }
- for (const filterResult of result.filter((r) => !r.ok)) {
- logger.trace(filterResult.message);
- }
- return false;
- }
- }
|