From 9192b3dc12aa43f79773ff2e6c06ac294fd11578 Mon Sep 17 00:00:00 2001 From: Christopher Mael Date: Sat, 23 Mar 2024 17:19:36 +0100 Subject: [PATCH] separate constants out to constants/ --- buy.ts | 62 ++++++++++++++++++++---------------------- constants/constants.ts | 17 ++++++++++++ constants/index.ts | 1 + 3 files changed, 48 insertions(+), 32 deletions(-) create mode 100644 constants/constants.ts create mode 100644 constants/index.ts diff --git a/buy.ts b/buy.ts index 30e0ba8..1eeff05 100644 --- a/buy.ts +++ b/buy.ts @@ -24,21 +24,30 @@ import { KeyedAccountInfo, TransactionMessage, VersionedTransaction, - Commitment, } from '@solana/web3.js'; import { getTokenAccounts, RAYDIUM_LIQUIDITY_PROGRAM_ID_V4, OPENBOOK_PROGRAM_ID, createPoolKeys } from './liquidity'; -import { logger, retrieveEnvVariable } from './utils'; +import { logger } from './utils'; import { getMinimalMarketV3, MinimalMarketLayoutV3 } from './market'; import { MintLayout } from './types'; import bs58 from 'bs58'; import * as fs from 'fs'; import * as path from 'path'; - - -const network = 'mainnet-beta'; -const RPC_ENDPOINT = retrieveEnvVariable('RPC_ENDPOINT', logger); -const RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable('RPC_WEBSOCKET_ENDPOINT', logger); -const LOG_LEVEL = retrieveEnvVariable('LOG_LEVEL', logger); +import { + AUTO_SELL, + AUTO_SELL_DELAY, + CHECK_IF_MINT_IS_RENOUNCED, + COMMITMENT_LEVEL, + LOG_LEVEL, + MAX_SELL_RETRIES, + NETWORK, + PRIVATE_KEY, + QUOTE_AMOUNT, + QUOTE_MINT, + RPC_ENDPOINT, + RPC_WEBSOCKET_ENDPOINT, + SNIPE_LIST_REFRESH_INTERVAL, + USE_SNIPE_LIST, +} from './constants'; const solanaConnection = new Connection(RPC_ENDPOINT, { wsEndpoint: RPC_WEBSOCKET_ENDPOINT, @@ -59,14 +68,6 @@ let wallet: Keypair; let quoteToken: Token; let quoteTokenAssociatedAddress: PublicKey; let quoteAmount: TokenAmount; -let commitment: Commitment = retrieveEnvVariable('COMMITMENT_LEVEL', logger) as Commitment; - -const CHECK_IF_MINT_IS_RENOUNCED = retrieveEnvVariable('CHECK_IF_MINT_IS_RENOUNCED', logger) === 'true'; -const USE_SNIPE_LIST = retrieveEnvVariable('USE_SNIPE_LIST', logger) === 'true'; -const SNIPE_LIST_REFRESH_INTERVAL = Number(retrieveEnvVariable('SNIPE_LIST_REFRESH_INTERVAL', logger)); -const AUTO_SELL = retrieveEnvVariable('AUTO_SELL', logger) === 'true'; -const MAX_SELL_RETRIES = Number(retrieveEnvVariable('MAX_SELL_RETRIES', logger)); -const AUTO_SELL_DELAY = Number(retrieveEnvVariable('AUTO_SELL_DELAY', logger)); let snipeList: string[] = []; @@ -74,13 +75,10 @@ async function init(): Promise { logger.level = LOG_LEVEL; // get wallet - const PRIVATE_KEY = retrieveEnvVariable('PRIVATE_KEY', logger); wallet = Keypair.fromSecretKey(bs58.decode(PRIVATE_KEY)); logger.info(`Wallet Address: ${wallet.publicKey}`); // get quote mint and amount - const QUOTE_MINT = retrieveEnvVariable('QUOTE_MINT', logger); - const QUOTE_AMOUNT = retrieveEnvVariable('QUOTE_AMOUNT', logger); switch (QUOTE_MINT) { case 'WSOL': { quoteToken = Token.WSOL; @@ -108,7 +106,7 @@ async function init(): Promise { ); // check existing wallet for associated token account of quote mint - const tokenAccounts = await getTokenAccounts(solanaConnection, wallet.publicKey, commitment); + const tokenAccounts = await getTokenAccounts(solanaConnection, wallet.publicKey, COMMITMENT_LEVEL); for (const ta of tokenAccounts) { existingTokenAccounts.set(ta.accountInfo.mint.toString(), { @@ -198,7 +196,7 @@ async function buy(accountId: PublicKey, accountData: LiquidityStateV4): Promise if (!tokenAccount) { // it's possible that we didn't have time to fetch open book data - const market = await getMinimalMarketV3(solanaConnection, accountData.marketId, commitment); + const market = await getMinimalMarketV3(solanaConnection, accountData.marketId, COMMITMENT_LEVEL); tokenAccount = saveTokenAccount(accountData.baseMint, market); } @@ -218,7 +216,7 @@ async function buy(accountId: PublicKey, accountData: LiquidityStateV4): Promise ); const latestBlockhash = await solanaConnection.getLatestBlockhash({ - commitment: commitment, + commitment: COMMITMENT_LEVEL, }); const messageV0 = new TransactionMessage({ payerKey: wallet.publicKey, @@ -238,7 +236,7 @@ async function buy(accountId: PublicKey, accountData: LiquidityStateV4): Promise const transaction = new VersionedTransaction(messageV0); transaction.sign([wallet, ...innerTransaction.signers]); const signature = await solanaConnection.sendRawTransaction(transaction.serialize(), { - preflightCommitment: commitment, + preflightCommitment: COMMITMENT_LEVEL, }); logger.info({ mint: accountData.baseMint, signature }, `Sent buy tx`); const confirmation = await solanaConnection.confirmTransaction( @@ -247,14 +245,14 @@ async function buy(accountId: PublicKey, accountData: LiquidityStateV4): Promise lastValidBlockHeight: latestBlockhash.lastValidBlockHeight, blockhash: latestBlockhash.blockhash, }, - commitment, + COMMITMENT_LEVEL, ); if (!confirmation.value.err) { logger.info( { mint: accountData.baseMint, signature, - url: `https://solscan.io/tx/${signature}?cluster=${network}`, + url: `https://solscan.io/tx/${signature}?cluster=${NETWORK}`, }, `Confirmed buy tx`, ); @@ -314,7 +312,7 @@ async function sell(accountId: PublicKey, mint: PublicKey, amount: BigNumberish) ); const latestBlockhash = await solanaConnection.getLatestBlockhash({ - commitment: commitment, + commitment: COMMITMENT_LEVEL, }); const messageV0 = new TransactionMessage({ payerKey: wallet.publicKey, @@ -329,7 +327,7 @@ async function sell(accountId: PublicKey, mint: PublicKey, amount: BigNumberish) const transaction = new VersionedTransaction(messageV0); transaction.sign([wallet, ...innerTransaction.signers]); const signature = await solanaConnection.sendRawTransaction(transaction.serialize(), { - preflightCommitment: commitment, + preflightCommitment: COMMITMENT_LEVEL, }); logger.info({ mint, signature }, `Sent sell tx`); const confirmation = await solanaConnection.confirmTransaction( @@ -338,7 +336,7 @@ async function sell(accountId: PublicKey, mint: PublicKey, amount: BigNumberish) lastValidBlockHeight: latestBlockhash.lastValidBlockHeight, blockhash: latestBlockhash.blockhash, }, - commitment, + COMMITMENT_LEVEL, ); if (confirmation.value.err) { logger.debug(confirmation.value.err); @@ -351,7 +349,7 @@ async function sell(accountId: PublicKey, mint: PublicKey, amount: BigNumberish) dex: `https://dexscreener.com/solana/${mint}?maker=${wallet.publicKey}`, mint, signature, - url: `https://solscan.io/tx/${signature}?cluster=${network}`, + url: `https://solscan.io/tx/${signature}?cluster=${NETWORK}`, }, `Confirmed sell tx`, ); @@ -401,7 +399,7 @@ const runListener = async () => { const _ = processRaydiumPool(updatedAccountInfo.accountId, poolState); } }, - commitment, + COMMITMENT_LEVEL, [ { dataSize: LIQUIDITY_STATE_LAYOUT_V4.span }, { @@ -435,7 +433,7 @@ const runListener = async () => { const _ = processOpenBookMarket(updatedAccountInfo); } }, - commitment, + COMMITMENT_LEVEL, [ { dataSize: MARKET_STATE_LAYOUT_V3.span }, { @@ -459,7 +457,7 @@ const runListener = async () => { const _ = sell(updatedAccountInfo.accountId, accountData.mint, accountData.amount); }, - commitment, + COMMITMENT_LEVEL, [ { dataSize: 165, diff --git a/constants/constants.ts b/constants/constants.ts new file mode 100644 index 0000000..c0eceb3 --- /dev/null +++ b/constants/constants.ts @@ -0,0 +1,17 @@ +import { Commitment } from "@solana/web3.js"; +import { logger, retrieveEnvVariable } from "../utils"; + +export const NETWORK = 'mainnet-beta'; +export const COMMITMENT_LEVEL: Commitment = retrieveEnvVariable('COMMITMENT_LEVEL', logger) as Commitment; +export const RPC_ENDPOINT = retrieveEnvVariable('RPC_ENDPOINT', logger); +export const RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable('RPC_WEBSOCKET_ENDPOINT', logger); +export const LOG_LEVEL = retrieveEnvVariable('LOG_LEVEL', logger); +export const CHECK_IF_MINT_IS_RENOUNCED = retrieveEnvVariable('CHECK_IF_MINT_IS_RENOUNCED', logger) === 'true'; +export const USE_SNIPE_LIST = retrieveEnvVariable('USE_SNIPE_LIST', logger) === 'true'; +export const SNIPE_LIST_REFRESH_INTERVAL = Number(retrieveEnvVariable('SNIPE_LIST_REFRESH_INTERVAL', logger)); +export const AUTO_SELL = retrieveEnvVariable('AUTO_SELL', logger) === 'true'; +export const MAX_SELL_RETRIES = Number(retrieveEnvVariable('MAX_SELL_RETRIES', logger)); +export const AUTO_SELL_DELAY = Number(retrieveEnvVariable('AUTO_SELL_DELAY', logger)); +export const PRIVATE_KEY = retrieveEnvVariable('PRIVATE_KEY', logger); +export const QUOTE_MINT = retrieveEnvVariable('QUOTE_MINT', logger); +export const QUOTE_AMOUNT = retrieveEnvVariable('QUOTE_AMOUNT', logger); \ No newline at end of file diff --git a/constants/index.ts b/constants/index.ts new file mode 100644 index 0000000..e94e4b1 --- /dev/null +++ b/constants/index.ts @@ -0,0 +1 @@ +export * from './constants'; \ No newline at end of file