Ver código fonte

feat: Add MAX_POOL_SIZE check

OneRobotBoii 1 ano atrás
pai
commit
01941d8b16
3 arquivos alterados com 26 adições e 0 exclusões
  1. 1 0
      .env.copy
  2. 24 0
      buy.ts
  3. 1 0
      constants/constants.ts

+ 1 - 0
.env.copy

@@ -12,4 +12,5 @@ MAX_SELL_RETRIES=5
 AUTO_SELL_DELAY=1000
 LOG_LEVEL=info
 MIN_POOL_SIZE=10
+MAX_POOL_SIZE=50
 ONE_TOKEN_AT_A_TIME=true

+ 24 - 0
buy.ts

@@ -48,6 +48,7 @@ import {
   SNIPE_LIST_REFRESH_INTERVAL,
   USE_SNIPE_LIST,
   MIN_POOL_SIZE,
+  MAX_POOL_SIZE,
   ONE_TOKEN_AT_A_TIME,
 } from './constants';
 
@@ -71,6 +72,7 @@ let quoteToken: Token;
 let quoteTokenAssociatedAddress: PublicKey;
 let quoteAmount: TokenAmount;
 let quoteMinPoolSizeAmount: TokenAmount;
+let quoteMaxPoolSizeAmount: TokenAmount;
 let processingToken: Boolean = false;
 
 
@@ -90,6 +92,7 @@ async function init(): Promise<void> {
       quoteToken = Token.WSOL;
       quoteAmount = new TokenAmount(Token.WSOL, QUOTE_AMOUNT, false);
       quoteMinPoolSizeAmount = new TokenAmount(quoteToken, MIN_POOL_SIZE, false);
+      quoteMaxPoolSizeAmount = new TokenAmount(quoteToken, MAX_POOL_SIZE, false);
       break;
     }
     case 'USDC': {
@@ -102,6 +105,7 @@ async function init(): Promise<void> {
       );
       quoteAmount = new TokenAmount(quoteToken, QUOTE_AMOUNT, false);
       quoteMinPoolSizeAmount = new TokenAmount(quoteToken, MIN_POOL_SIZE, false);
+      quoteMaxPoolSizeAmount = new TokenAmount(quoteToken, MAX_POOL_SIZE, false);
       break;
     }
     default: {
@@ -114,6 +118,9 @@ async function init(): Promise<void> {
   logger.info(
     `Min pool size: ${quoteMinPoolSizeAmount.isZero() ? 'false' : quoteMinPoolSizeAmount.toFixed()} ${quoteToken.symbol}`,
   );
+  logger.info(
+    `Max pool size: ${quoteMaxPoolSizeAmount.isZero() ? 'false' : quoteMaxPoolSizeAmount.toFixed()} ${quoteToken.symbol}`,
+  );
   logger.info(`One token at a time: ${ONE_TOKEN_AT_A_TIME}`);
   logger.info(`Buy amount: ${quoteAmount.toFixed()} ${quoteToken.symbol}`);
   logger.info(`Auto sell: ${AUTO_SELL}`);
@@ -179,6 +186,23 @@ export async function processRaydiumPool(id: PublicKey, poolState: LiquidityStat
     }
   }
 
+  if (!quoteMaxPoolSizeAmount.isZero()) {
+    const poolSize = new TokenAmount(quoteToken, poolState.swapQuoteInAmount, true);
+
+    if (poolSize.gt(quoteMaxPoolSizeAmount)) {
+      logger.warn(
+        {
+          mint: poolState.baseMint,
+          pooled: `${poolSize.toFixed()} ${quoteToken.symbol}`,
+        },
+        `Skipping pool, bigger than ${quoteMaxPoolSizeAmount.toFixed()} ${quoteToken.symbol}`,
+        `Swap quote in amount: ${poolSize.toFixed()}`,
+      );
+      logger.info(`-------------------🤖🔧------------------- \n`);
+      return;
+    }
+  }
+
   if (CHECK_IF_MINT_IS_RENOUNCED) {
     const mintOption = await checkMintable(poolState.baseMint);
 

+ 1 - 0
constants/constants.ts

@@ -16,4 +16,5 @@ export const PRIVATE_KEY = retrieveEnvVariable('PRIVATE_KEY', logger);
 export const QUOTE_MINT = retrieveEnvVariable('QUOTE_MINT', logger);
 export const QUOTE_AMOUNT = retrieveEnvVariable('QUOTE_AMOUNT', logger);
 export const MIN_POOL_SIZE = retrieveEnvVariable('MIN_POOL_SIZE', logger);
+export const MAX_POOL_SIZE = retrieveEnvVariable('MAX_POOL_SIZE', logger);
 export const ONE_TOKEN_AT_A_TIME = retrieveEnvVariable('ONE_TOKEN_AT_A_TIME', logger) === 'true';