mirror of
https://github.com/fdundjer/solana-sniper-bot.git
synced 2025-11-09 20:12:06 +10:00
separate constants out to constants/
This commit is contained in:
62
buy.ts
62
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<void> {
|
||||
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<void> {
|
||||
);
|
||||
|
||||
// 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(), <MinimalTokenAccountData>{
|
||||
@ -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,
|
||||
|
||||
17
constants/constants.ts
Normal file
17
constants/constants.ts
Normal file
@ -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);
|
||||
1
constants/index.ts
Normal file
1
constants/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export * from './constants';
|
||||
Reference in New Issue
Block a user