tsc & prettier

This commit is contained in:
Filip Dunder
2024-04-30 10:52:42 -03:00
parent 04e5ca7d27
commit 77c9853562
55 changed files with 2842 additions and 790 deletions

63
helpers/constants.js Normal file
View File

@ -0,0 +1,63 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SNIPE_LIST_REFRESH_INTERVAL = exports.USE_SNIPE_LIST = exports.MAX_POOL_SIZE = exports.MIN_POOL_SIZE = exports.CHECK_IF_BURNED = exports.CHECK_IF_FREEZABLE = exports.CHECK_IF_MINT_IS_RENOUNCED = exports.CHECK_IF_SOCIALS = exports.CHECK_IF_MUTABLE = exports.CONSECUTIVE_FILTER_MATCHES = exports.FILTER_CHECK_DURATION = exports.FILTER_CHECK_INTERVAL = exports.SKIP_SELLING_IF_LOST_MORE_THAN = exports.SELL_SLIPPAGE = exports.PRICE_CHECK_DURATION = exports.PRICE_CHECK_INTERVAL = exports.TRAILING_STOP_LOSS = exports.STOP_LOSS = exports.TAKE_PROFIT = exports.MAX_SELL_RETRIES = exports.AUTO_SELL_DELAY = exports.AUTO_SELL = exports.BUY_SLIPPAGE = exports.MAX_BUY_RETRIES = exports.QUOTE_AMOUNT = exports.QUOTE_MINT = exports.AUTO_BUY_DELAY = exports.CUSTOM_FEE = exports.TRANSACTION_EXECUTOR = exports.CACHE_NEW_MARKETS = exports.PRE_LOAD_EXISTING_MARKETS = exports.COMPUTE_UNIT_PRICE = exports.COMPUTE_UNIT_LIMIT = exports.MAX_TOKENS_AT_THE_TIME = exports.LOG_LEVEL = exports.RPC_WEBSOCKET_ENDPOINT = exports.RPC_ENDPOINT = exports.COMMITMENT_LEVEL = exports.NETWORK = exports.PRIVATE_KEY = void 0;
const dotenv_1 = __importDefault(require("dotenv"));
const logger_1 = require("./logger");
dotenv_1.default.config();
const retrieveEnvVariable = (variableName, logger) => {
const variable = process.env[variableName] || "";
if (!variable) {
logger.error(`${variableName} is not set`);
process.exit(1);
}
return variable;
};
// Wallet
exports.PRIVATE_KEY = retrieveEnvVariable("PRIVATE_KEY", logger_1.logger);
// Connection
exports.NETWORK = "mainnet-beta";
exports.COMMITMENT_LEVEL = retrieveEnvVariable("COMMITMENT_LEVEL", logger_1.logger);
exports.RPC_ENDPOINT = retrieveEnvVariable("RPC_ENDPOINT", logger_1.logger);
exports.RPC_WEBSOCKET_ENDPOINT = retrieveEnvVariable("RPC_WEBSOCKET_ENDPOINT", logger_1.logger);
// Bot
exports.LOG_LEVEL = retrieveEnvVariable("LOG_LEVEL", logger_1.logger);
exports.MAX_TOKENS_AT_THE_TIME = Number(retrieveEnvVariable("MAX_TOKENS_AT_THE_TIME", logger_1.logger));
exports.COMPUTE_UNIT_LIMIT = Number(retrieveEnvVariable("COMPUTE_UNIT_LIMIT", logger_1.logger));
exports.COMPUTE_UNIT_PRICE = Number(retrieveEnvVariable("COMPUTE_UNIT_PRICE", logger_1.logger));
exports.PRE_LOAD_EXISTING_MARKETS = retrieveEnvVariable("PRE_LOAD_EXISTING_MARKETS", logger_1.logger) === "true";
exports.CACHE_NEW_MARKETS = retrieveEnvVariable("CACHE_NEW_MARKETS", logger_1.logger) === "true";
exports.TRANSACTION_EXECUTOR = retrieveEnvVariable("TRANSACTION_EXECUTOR", logger_1.logger);
exports.CUSTOM_FEE = retrieveEnvVariable("CUSTOM_FEE", logger_1.logger);
// Buy
exports.AUTO_BUY_DELAY = Number(retrieveEnvVariable("AUTO_BUY_DELAY", logger_1.logger));
exports.QUOTE_MINT = retrieveEnvVariable("QUOTE_MINT", logger_1.logger);
exports.QUOTE_AMOUNT = retrieveEnvVariable("QUOTE_AMOUNT", logger_1.logger);
exports.MAX_BUY_RETRIES = Number(retrieveEnvVariable("MAX_BUY_RETRIES", logger_1.logger));
exports.BUY_SLIPPAGE = Number(retrieveEnvVariable("BUY_SLIPPAGE", logger_1.logger));
// Sell
exports.AUTO_SELL = retrieveEnvVariable("AUTO_SELL", logger_1.logger) === "true";
exports.AUTO_SELL_DELAY = Number(retrieveEnvVariable("AUTO_SELL_DELAY", logger_1.logger));
exports.MAX_SELL_RETRIES = Number(retrieveEnvVariable("MAX_SELL_RETRIES", logger_1.logger));
exports.TAKE_PROFIT = Number(retrieveEnvVariable("TAKE_PROFIT", logger_1.logger));
exports.STOP_LOSS = Number(retrieveEnvVariable("STOP_LOSS", logger_1.logger));
exports.TRAILING_STOP_LOSS = retrieveEnvVariable("TRAILING_STOP_LOSS", logger_1.logger) === "true";
exports.PRICE_CHECK_INTERVAL = Number(retrieveEnvVariable("PRICE_CHECK_INTERVAL", logger_1.logger));
exports.PRICE_CHECK_DURATION = Number(retrieveEnvVariable("PRICE_CHECK_DURATION", logger_1.logger));
exports.SELL_SLIPPAGE = Number(retrieveEnvVariable("SELL_SLIPPAGE", logger_1.logger));
exports.SKIP_SELLING_IF_LOST_MORE_THAN = Number(retrieveEnvVariable("SKIP_SELLING_IF_LOST_MORE_THAN", logger_1.logger));
// Filters
exports.FILTER_CHECK_INTERVAL = Number(retrieveEnvVariable("FILTER_CHECK_INTERVAL", logger_1.logger));
exports.FILTER_CHECK_DURATION = Number(retrieveEnvVariable("FILTER_CHECK_DURATION", logger_1.logger));
exports.CONSECUTIVE_FILTER_MATCHES = Number(retrieveEnvVariable("CONSECUTIVE_FILTER_MATCHES", logger_1.logger));
exports.CHECK_IF_MUTABLE = retrieveEnvVariable("CHECK_IF_MUTABLE", logger_1.logger) === "true";
exports.CHECK_IF_SOCIALS = retrieveEnvVariable("CHECK_IF_SOCIALS", logger_1.logger) === "true";
exports.CHECK_IF_MINT_IS_RENOUNCED = retrieveEnvVariable("CHECK_IF_MINT_IS_RENOUNCED", logger_1.logger) === "true";
exports.CHECK_IF_FREEZABLE = retrieveEnvVariable("CHECK_IF_FREEZABLE", logger_1.logger) === "true";
exports.CHECK_IF_BURNED = retrieveEnvVariable("CHECK_IF_BURNED", logger_1.logger) === "true";
exports.MIN_POOL_SIZE = retrieveEnvVariable("MIN_POOL_SIZE", logger_1.logger);
exports.MAX_POOL_SIZE = retrieveEnvVariable("MAX_POOL_SIZE", logger_1.logger);
exports.USE_SNIPE_LIST = retrieveEnvVariable("USE_SNIPE_LIST", logger_1.logger) === "true";
exports.SNIPE_LIST_REFRESH_INTERVAL = Number(retrieveEnvVariable("SNIPE_LIST_REFRESH_INTERVAL", logger_1.logger));

View File

@ -1,67 +1,67 @@
import { Logger } from 'pino';
import dotenv from 'dotenv';
import { Commitment } from '@solana/web3.js';
import { logger } from './logger';
import { Logger } from "pino";
import dotenv from "dotenv";
import { Commitment } from "@solana/web3.js";
import { logger } from "./logger";
dotenv.config();
const retrieveEnvVariable = (variableName: string, logger: Logger) => {
const variable = process.env[variableName] || '';
if (!variable) {
logger.error(`${variableName} is not set`);
process.exit(1);
}
return variable;
const variable = process.env[variableName] || "";
if (!variable) {
logger.error(`${variableName} is not set`);
process.exit(1);
}
return variable;
};
// Wallet
export const PRIVATE_KEY = retrieveEnvVariable('PRIVATE_KEY', logger);
export const PRIVATE_KEY = retrieveEnvVariable("PRIVATE_KEY", logger);
// Connection
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 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);
// Bot
export const LOG_LEVEL = retrieveEnvVariable('LOG_LEVEL', logger);
export const MAX_TOKENS_AT_THE_TIME = Number(retrieveEnvVariable('MAX_TOKENS_AT_THE_TIME', logger));
export const COMPUTE_UNIT_LIMIT = Number(retrieveEnvVariable('COMPUTE_UNIT_LIMIT', logger));
export const COMPUTE_UNIT_PRICE = Number(retrieveEnvVariable('COMPUTE_UNIT_PRICE', logger));
export const PRE_LOAD_EXISTING_MARKETS = retrieveEnvVariable('PRE_LOAD_EXISTING_MARKETS', logger) === 'true';
export const CACHE_NEW_MARKETS = retrieveEnvVariable('CACHE_NEW_MARKETS', logger) === 'true';
export const TRANSACTION_EXECUTOR = retrieveEnvVariable('TRANSACTION_EXECUTOR', logger);
export const CUSTOM_FEE = retrieveEnvVariable('CUSTOM_FEE', logger);
export const LOG_LEVEL = retrieveEnvVariable("LOG_LEVEL", logger);
export const MAX_TOKENS_AT_THE_TIME = Number(retrieveEnvVariable("MAX_TOKENS_AT_THE_TIME", logger));
export const COMPUTE_UNIT_LIMIT = Number(retrieveEnvVariable("COMPUTE_UNIT_LIMIT", logger));
export const COMPUTE_UNIT_PRICE = Number(retrieveEnvVariable("COMPUTE_UNIT_PRICE", logger));
export const PRE_LOAD_EXISTING_MARKETS = retrieveEnvVariable("PRE_LOAD_EXISTING_MARKETS", logger) === "true";
export const CACHE_NEW_MARKETS = retrieveEnvVariable("CACHE_NEW_MARKETS", logger) === "true";
export const TRANSACTION_EXECUTOR = retrieveEnvVariable("TRANSACTION_EXECUTOR", logger);
export const CUSTOM_FEE = retrieveEnvVariable("CUSTOM_FEE", logger);
// Buy
export const AUTO_BUY_DELAY = Number(retrieveEnvVariable('AUTO_BUY_DELAY', logger));
export const QUOTE_MINT = retrieveEnvVariable('QUOTE_MINT', logger);
export const QUOTE_AMOUNT = retrieveEnvVariable('QUOTE_AMOUNT', logger);
export const MAX_BUY_RETRIES = Number(retrieveEnvVariable('MAX_BUY_RETRIES', logger));
export const BUY_SLIPPAGE = Number(retrieveEnvVariable('BUY_SLIPPAGE', logger));
export const AUTO_BUY_DELAY = Number(retrieveEnvVariable("AUTO_BUY_DELAY", logger));
export const QUOTE_MINT = retrieveEnvVariable("QUOTE_MINT", logger);
export const QUOTE_AMOUNT = retrieveEnvVariable("QUOTE_AMOUNT", logger);
export const MAX_BUY_RETRIES = Number(retrieveEnvVariable("MAX_BUY_RETRIES", logger));
export const BUY_SLIPPAGE = Number(retrieveEnvVariable("BUY_SLIPPAGE", logger));
// Sell
export const AUTO_SELL = retrieveEnvVariable('AUTO_SELL', logger) === 'true';
export const AUTO_SELL_DELAY = Number(retrieveEnvVariable('AUTO_SELL_DELAY', logger));
export const MAX_SELL_RETRIES = Number(retrieveEnvVariable('MAX_SELL_RETRIES', logger));
export const TAKE_PROFIT = Number(retrieveEnvVariable('TAKE_PROFIT', logger));
export const STOP_LOSS = Number(retrieveEnvVariable('STOP_LOSS', logger));
export const TRAILING_STOP_LOSS = retrieveEnvVariable('TRAILING_STOP_LOSS', logger) === 'true';
export const PRICE_CHECK_INTERVAL = Number(retrieveEnvVariable('PRICE_CHECK_INTERVAL', logger));
export const PRICE_CHECK_DURATION = Number(retrieveEnvVariable('PRICE_CHECK_DURATION', logger));
export const SELL_SLIPPAGE = Number(retrieveEnvVariable('SELL_SLIPPAGE', logger));
export const SKIP_SELLING_IF_LOST_MORE_THAN = Number(retrieveEnvVariable('SKIP_SELLING_IF_LOST_MORE_THAN', logger));
export const AUTO_SELL = retrieveEnvVariable("AUTO_SELL", logger) === "true";
export const AUTO_SELL_DELAY = Number(retrieveEnvVariable("AUTO_SELL_DELAY", logger));
export const MAX_SELL_RETRIES = Number(retrieveEnvVariable("MAX_SELL_RETRIES", logger));
export const TAKE_PROFIT = Number(retrieveEnvVariable("TAKE_PROFIT", logger));
export const STOP_LOSS = Number(retrieveEnvVariable("STOP_LOSS", logger));
export const TRAILING_STOP_LOSS = retrieveEnvVariable("TRAILING_STOP_LOSS", logger) === "true";
export const PRICE_CHECK_INTERVAL = Number(retrieveEnvVariable("PRICE_CHECK_INTERVAL", logger));
export const PRICE_CHECK_DURATION = Number(retrieveEnvVariable("PRICE_CHECK_DURATION", logger));
export const SELL_SLIPPAGE = Number(retrieveEnvVariable("SELL_SLIPPAGE", logger));
export const SKIP_SELLING_IF_LOST_MORE_THAN = Number(retrieveEnvVariable("SKIP_SELLING_IF_LOST_MORE_THAN", logger));
// Filters
export const FILTER_CHECK_INTERVAL = Number(retrieveEnvVariable('FILTER_CHECK_INTERVAL', logger));
export const FILTER_CHECK_DURATION = Number(retrieveEnvVariable('FILTER_CHECK_DURATION', logger));
export const CONSECUTIVE_FILTER_MATCHES = Number(retrieveEnvVariable('CONSECUTIVE_FILTER_MATCHES', logger));
export const CHECK_IF_MUTABLE = retrieveEnvVariable('CHECK_IF_MUTABLE', logger) === 'true';
export const CHECK_IF_SOCIALS = retrieveEnvVariable('CHECK_IF_SOCIALS', logger) === 'true';
export const CHECK_IF_MINT_IS_RENOUNCED = retrieveEnvVariable('CHECK_IF_MINT_IS_RENOUNCED', logger) === 'true';
export const CHECK_IF_FREEZABLE = retrieveEnvVariable('CHECK_IF_FREEZABLE', logger) === 'true';
export const CHECK_IF_BURNED = retrieveEnvVariable('CHECK_IF_BURNED', logger) === 'true';
export const MIN_POOL_SIZE = retrieveEnvVariable('MIN_POOL_SIZE', logger);
export const MAX_POOL_SIZE = retrieveEnvVariable('MAX_POOL_SIZE', logger);
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 FILTER_CHECK_INTERVAL = Number(retrieveEnvVariable("FILTER_CHECK_INTERVAL", logger));
export const FILTER_CHECK_DURATION = Number(retrieveEnvVariable("FILTER_CHECK_DURATION", logger));
export const CONSECUTIVE_FILTER_MATCHES = Number(retrieveEnvVariable("CONSECUTIVE_FILTER_MATCHES", logger));
export const CHECK_IF_MUTABLE = retrieveEnvVariable("CHECK_IF_MUTABLE", logger) === "true";
export const CHECK_IF_SOCIALS = retrieveEnvVariable("CHECK_IF_SOCIALS", logger) === "true";
export const CHECK_IF_MINT_IS_RENOUNCED = retrieveEnvVariable("CHECK_IF_MINT_IS_RENOUNCED", logger) === "true";
export const CHECK_IF_FREEZABLE = retrieveEnvVariable("CHECK_IF_FREEZABLE", logger) === "true";
export const CHECK_IF_BURNED = retrieveEnvVariable("CHECK_IF_BURNED", logger) === "true";
export const MIN_POOL_SIZE = retrieveEnvVariable("MIN_POOL_SIZE", logger);
export const MAX_POOL_SIZE = retrieveEnvVariable("MAX_POOL_SIZE", logger);
export const USE_SNIPE_LIST = retrieveEnvVariable("USE_SNIPE_LIST", logger) === "true";
export const SNIPE_LIST_REFRESH_INTERVAL = Number(retrieveEnvVariable("SNIPE_LIST_REFRESH_INTERVAL", logger));

23
helpers/index.js Normal file
View File

@ -0,0 +1,23 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./market"), exports);
__exportStar(require("./liquidity"), exports);
__exportStar(require("./logger"), exports);
__exportStar(require("./constants"), exports);
__exportStar(require("./token"), exports);
__exportStar(require("./wallet"), exports);
__exportStar(require("./promises"), exports);

View File

@ -1,7 +1,7 @@
export * from './market';
export * from './liquidity';
export * from './logger';
export * from './constants';
export * from './token';
export * from './wallet';
export * from './promises'
export * from "./market";
export * from "./liquidity";
export * from "./logger";
export * from "./constants";
export * from "./token";
export * from "./wallet";
export * from "./promises";

41
helpers/liquidity.js Normal file
View File

@ -0,0 +1,41 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createPoolKeys = void 0;
const web3_js_1 = require("@solana/web3.js");
const raydium_sdk_1 = require("@raydium-io/raydium-sdk");
function createPoolKeys(id, accountData, minimalMarketLayoutV3) {
return {
id,
baseMint: accountData.baseMint,
quoteMint: accountData.quoteMint,
lpMint: accountData.lpMint,
baseDecimals: accountData.baseDecimal.toNumber(),
quoteDecimals: accountData.quoteDecimal.toNumber(),
lpDecimals: 5,
version: 4,
programId: raydium_sdk_1.MAINNET_PROGRAM_ID.AmmV4,
authority: raydium_sdk_1.Liquidity.getAssociatedAuthority({
programId: raydium_sdk_1.MAINNET_PROGRAM_ID.AmmV4,
}).publicKey,
openOrders: accountData.openOrders,
targetOrders: accountData.targetOrders,
baseVault: accountData.baseVault,
quoteVault: accountData.quoteVault,
marketVersion: 3,
marketProgramId: accountData.marketProgramId,
marketId: accountData.marketId,
marketAuthority: raydium_sdk_1.Market.getAssociatedAuthority({
programId: accountData.marketProgramId,
marketId: accountData.marketId,
}).publicKey,
marketBaseVault: accountData.baseVault,
marketQuoteVault: accountData.quoteVault,
marketBids: minimalMarketLayoutV3.bids,
marketAsks: minimalMarketLayoutV3.asks,
marketEventQueue: minimalMarketLayoutV3.eventQueue,
withdrawQueue: accountData.withdrawQueue,
lpVault: accountData.lpVault,
lookupTableAccount: web3_js_1.PublicKey.default,
};
}
exports.createPoolKeys = createPoolKeys;

View File

@ -1,43 +1,43 @@
import { PublicKey } from '@solana/web3.js';
import { Liquidity, LiquidityPoolKeys, LiquidityStateV4, MAINNET_PROGRAM_ID, Market } from '@raydium-io/raydium-sdk';
import { MinimalMarketLayoutV3 } from './market';
import { PublicKey } from "@solana/web3.js";
import { Liquidity, LiquidityPoolKeys, LiquidityStateV4, MAINNET_PROGRAM_ID, Market } from "@raydium-io/raydium-sdk";
import { MinimalMarketLayoutV3 } from "./market";
export function createPoolKeys(
id: PublicKey,
accountData: LiquidityStateV4,
minimalMarketLayoutV3: MinimalMarketLayoutV3,
id: PublicKey,
accountData: LiquidityStateV4,
minimalMarketLayoutV3: MinimalMarketLayoutV3,
): LiquidityPoolKeys {
return {
id,
baseMint: accountData.baseMint,
quoteMint: accountData.quoteMint,
lpMint: accountData.lpMint,
baseDecimals: accountData.baseDecimal.toNumber(),
quoteDecimals: accountData.quoteDecimal.toNumber(),
lpDecimals: 5,
version: 4,
programId: MAINNET_PROGRAM_ID.AmmV4,
authority: Liquidity.getAssociatedAuthority({
programId: MAINNET_PROGRAM_ID.AmmV4,
}).publicKey,
openOrders: accountData.openOrders,
targetOrders: accountData.targetOrders,
baseVault: accountData.baseVault,
quoteVault: accountData.quoteVault,
marketVersion: 3,
marketProgramId: accountData.marketProgramId,
marketId: accountData.marketId,
marketAuthority: Market.getAssociatedAuthority({
programId: accountData.marketProgramId,
marketId: accountData.marketId,
}).publicKey,
marketBaseVault: accountData.baseVault,
marketQuoteVault: accountData.quoteVault,
marketBids: minimalMarketLayoutV3.bids,
marketAsks: minimalMarketLayoutV3.asks,
marketEventQueue: minimalMarketLayoutV3.eventQueue,
withdrawQueue: accountData.withdrawQueue,
lpVault: accountData.lpVault,
lookupTableAccount: PublicKey.default,
};
return {
id,
baseMint: accountData.baseMint,
quoteMint: accountData.quoteMint,
lpMint: accountData.lpMint,
baseDecimals: accountData.baseDecimal.toNumber(),
quoteDecimals: accountData.quoteDecimal.toNumber(),
lpDecimals: 5,
version: 4,
programId: MAINNET_PROGRAM_ID.AmmV4,
authority: Liquidity.getAssociatedAuthority({
programId: MAINNET_PROGRAM_ID.AmmV4,
}).publicKey,
openOrders: accountData.openOrders,
targetOrders: accountData.targetOrders,
baseVault: accountData.baseVault,
quoteVault: accountData.quoteVault,
marketVersion: 3,
marketProgramId: accountData.marketProgramId,
marketId: accountData.marketId,
marketAuthority: Market.getAssociatedAuthority({
programId: accountData.marketProgramId,
marketId: accountData.marketId,
}).publicKey,
marketBaseVault: accountData.baseVault,
marketQuoteVault: accountData.quoteVault,
marketBids: minimalMarketLayoutV3.bids,
marketAsks: minimalMarketLayoutV3.asks,
marketEventQueue: minimalMarketLayoutV3.eventQueue,
withdrawQueue: accountData.withdrawQueue,
lpVault: accountData.lpVault,
lookupTableAccount: PublicKey.default,
};
}

18
helpers/logger.js Normal file
View File

@ -0,0 +1,18 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.logger = void 0;
const pino_1 = __importDefault(require("pino"));
const transport = pino_1.default.transport({
target: "pino-pretty",
});
exports.logger = (0, pino_1.default)({
level: "info",
redact: ["poolKeys"],
serializers: {
error: pino_1.default.stdSerializers.err,
},
base: undefined,
}, transport);

View File

@ -1,17 +1,17 @@
import pino from 'pino';
import pino from "pino";
const transport = pino.transport({
target: 'pino-pretty',
target: "pino-pretty",
});
export const logger = pino(
{
level: 'info',
redact: ['poolKeys'],
serializers: {
error: pino.stdSerializers.err,
},
base: undefined,
},
transport,
{
level: "info",
redact: ["poolKeys"],
serializers: {
error: pino.stdSerializers.err,
},
base: undefined,
},
transport,
);

27
helpers/market.js Normal file
View File

@ -0,0 +1,27 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMinimalMarketV3 = exports.MINIMAL_MARKET_STATE_LAYOUT_V3 = void 0;
const raydium_sdk_1 = require("@raydium-io/raydium-sdk");
exports.MINIMAL_MARKET_STATE_LAYOUT_V3 = (0, raydium_sdk_1.struct)([(0, raydium_sdk_1.publicKey)("eventQueue"), (0, raydium_sdk_1.publicKey)("bids"), (0, raydium_sdk_1.publicKey)("asks")]);
function getMinimalMarketV3(connection, marketId, commitment) {
return __awaiter(this, void 0, void 0, function* () {
const marketInfo = yield connection.getAccountInfo(marketId, {
commitment,
dataSlice: {
offset: raydium_sdk_1.MARKET_STATE_LAYOUT_V3.offsetOf("eventQueue"),
length: 32 * 3,
},
});
return exports.MINIMAL_MARKET_STATE_LAYOUT_V3.decode(marketInfo.data);
});
}
exports.getMinimalMarketV3 = getMinimalMarketV3;

View File

@ -1,22 +1,22 @@
import { Commitment, Connection, PublicKey } from '@solana/web3.js';
import { GetStructureSchema, MARKET_STATE_LAYOUT_V3, publicKey, struct } from '@raydium-io/raydium-sdk';
import { Commitment, Connection, PublicKey } from "@solana/web3.js";
import { GetStructureSchema, MARKET_STATE_LAYOUT_V3, publicKey, struct } from "@raydium-io/raydium-sdk";
export const MINIMAL_MARKET_STATE_LAYOUT_V3 = struct([publicKey('eventQueue'), publicKey('bids'), publicKey('asks')]);
export const MINIMAL_MARKET_STATE_LAYOUT_V3 = struct([publicKey("eventQueue"), publicKey("bids"), publicKey("asks")]);
export type MinimalMarketStateLayoutV3 = typeof MINIMAL_MARKET_STATE_LAYOUT_V3;
export type MinimalMarketLayoutV3 = GetStructureSchema<MinimalMarketStateLayoutV3>;
export async function getMinimalMarketV3(
connection: Connection,
marketId: PublicKey,
commitment?: Commitment,
connection: Connection,
marketId: PublicKey,
commitment?: Commitment,
): Promise<MinimalMarketLayoutV3> {
const marketInfo = await connection.getAccountInfo(marketId, {
commitment,
dataSlice: {
offset: MARKET_STATE_LAYOUT_V3.offsetOf('eventQueue'),
length: 32 * 3,
},
});
const marketInfo = await connection.getAccountInfo(marketId, {
commitment,
dataSlice: {
offset: MARKET_STATE_LAYOUT_V3.offsetOf("eventQueue"),
length: 32 * 3,
},
});
return MINIMAL_MARKET_STATE_LAYOUT_V3.decode(marketInfo!.data);
return MINIMAL_MARKET_STATE_LAYOUT_V3.decode(marketInfo!.data);
}

5
helpers/promises.js Normal file
View File

@ -0,0 +1,5 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.sleep = void 0;
const sleep = (ms = 0) => new Promise((resolve) => setTimeout(resolve, ms));
exports.sleep = sleep;

20
helpers/token.js Normal file
View File

@ -0,0 +1,20 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getToken = void 0;
const raydium_sdk_1 = require("@raydium-io/raydium-sdk");
const spl_token_1 = require("@solana/spl-token");
const web3_js_1 = require("@solana/web3.js");
function getToken(token) {
switch (token) {
case "WSOL": {
return raydium_sdk_1.Token.WSOL;
}
case "USDC": {
return new raydium_sdk_1.Token(spl_token_1.TOKEN_PROGRAM_ID, new web3_js_1.PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), 6, "USDC", "USDC");
}
default: {
throw new Error(`Unsupported quote mint "${token}". Supported values are USDC and WSOL`);
}
}
}
exports.getToken = getToken;

View File

@ -1,23 +1,23 @@
import { Token } from '@raydium-io/raydium-sdk';
import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
import { PublicKey } from '@solana/web3.js';
import { Token } from "@raydium-io/raydium-sdk";
import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
import { PublicKey } from "@solana/web3.js";
export function getToken(token: string) {
switch (token) {
case 'WSOL': {
return Token.WSOL;
}
case 'USDC': {
return new Token(
TOKEN_PROGRAM_ID,
new PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
6,
'USDC',
'USDC',
);
}
default: {
throw new Error(`Unsupported quote mint "${token}". Supported values are USDC and WSOL`);
}
}
switch (token) {
case "WSOL": {
return Token.WSOL;
}
case "USDC": {
return new Token(
TOKEN_PROGRAM_ID,
new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),
6,
"USDC",
"USDC",
);
}
default: {
throw new Error(`Unsupported quote mint "${token}". Supported values are USDC and WSOL`);
}
}
}

25
helpers/wallet.js Normal file
View File

@ -0,0 +1,25 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getWallet = void 0;
const web3_js_1 = require("@solana/web3.js");
const bs58_1 = __importDefault(require("bs58"));
const bip39_1 = require("bip39");
const ed25519_hd_key_1 = require("ed25519-hd-key");
function getWallet(wallet) {
// most likely someone pasted the private key in binary format
if (wallet.startsWith("[")) {
return web3_js_1.Keypair.fromSecretKey(JSON.parse(wallet));
}
// most likely someone pasted mnemonic
if (wallet.split(" ").length > 1) {
const seed = (0, bip39_1.mnemonicToSeedSync)(wallet, "");
const path = `m/44'/501'/0'/0'`; // we assume it's first path
return web3_js_1.Keypair.fromSeed((0, ed25519_hd_key_1.derivePath)(path, seed.toString("hex")).key);
}
// most likely someone pasted base58 encoded private key
return web3_js_1.Keypair.fromSecretKey(bs58_1.default.decode(wallet));
}
exports.getWallet = getWallet;

View File

@ -1,21 +1,21 @@
import { Keypair } from '@solana/web3.js';
import bs58 from 'bs58';
import { mnemonicToSeedSync } from 'bip39';
import { derivePath } from 'ed25519-hd-key';
import { Keypair } from "@solana/web3.js";
import bs58 from "bs58";
import { mnemonicToSeedSync } from "bip39";
import { derivePath } from "ed25519-hd-key";
export function getWallet(wallet: string): Keypair {
// most likely someone pasted the private key in binary format
if (wallet.startsWith('[')) {
return Keypair.fromSecretKey(JSON.parse(wallet));
}
// most likely someone pasted the private key in binary format
if (wallet.startsWith("[")) {
return Keypair.fromSecretKey(JSON.parse(wallet));
}
// most likely someone pasted mnemonic
if (wallet.split(' ').length > 1) {
const seed = mnemonicToSeedSync(wallet, '');
const path = `m/44'/501'/0'/0'`; // we assume it's first path
return Keypair.fromSeed(derivePath(path, seed.toString('hex')).key);
}
// most likely someone pasted mnemonic
if (wallet.split(" ").length > 1) {
const seed = mnemonicToSeedSync(wallet, "");
const path = `m/44'/501'/0'/0'`; // we assume it's first path
return Keypair.fromSeed(derivePath(path, seed.toString("hex")).key);
}
// most likely someone pasted base58 encoded private key
return Keypair.fromSecretKey(bs58.decode(wallet));
// most likely someone pasted base58 encoded private key
return Keypair.fromSecretKey(bs58.decode(wallet));
}