UNPKG

@dinolab/crypto-mm

Version:

Crypto Market Maker

204 lines 8.24 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SolMM = void 0; const web3_js_1 = require("@solana/web3.js"); const axios_1 = __importDefault(require("axios")); const types_js_1 = require("./types/types.js"); const sol_liquidity_tracker_js_1 = require("./handlers/sol.liquidity.tracker.js"); const sol_profit_tracker_js_1 = require("./handlers/sol.profit.tracker.js"); const sol_token_creator_js_1 = __importDefault(require("./handlers/sol.token.creator.js")); const utils_js_1 = require("./utils/utils.js"); class SolMM { constructor(rpcUrl, testnet) { this.boostHandlers = []; this.tradeVolumeHandlers = []; this.sellHandlers = []; this.testnet = testnet; this.trackers = { [types_js_1.TrackType.Liquidity]: new sol_liquidity_tracker_js_1.LiquidityTracking(), [types_js_1.TrackType.Profit]: new sol_profit_tracker_js_1.ProfitTracker(), }; this.rpcUrl = rpcUrl; this.connection = new web3_js_1.Connection(rpcUrl, "confirmed"); this.tokenCreator = new sol_token_creator_js_1.default(rpcUrl); } async getBalance(walletAddresses) { const batchSize = 10; const walletBalances = {}; for (let i = 0; i < walletAddresses.length; i += batchSize) { const batchWalletAddresses = walletAddresses.slice(i, i + batchSize); const promises = batchWalletAddresses.map(async (walletAddress) => { try { const balance = await this.connection.getBalance(new web3_js_1.PublicKey(walletAddress)); walletBalances[walletAddress] = { balance: BigInt(balance), balanceFormatted: (balance / web3_js_1.LAMPORTS_PER_SOL).toString(), quote: 0, }; } catch (e) { console.error(`❌ Error getting native balance for ${walletAddress.slice(0, 8)}. Error: ${e.message}`); walletBalances[walletAddress] = { address: walletAddress, balance: 0n, balanceFormatted: "0", quote: 0, }; } }); await Promise.all(promises); } return walletBalances; } async getTokenInfo(tokenAddress) { try { const response = await axios_1.default.get("https://lite-api.jup.ag/tokens/v2/search", { params: { query: tokenAddress, }, }); if (response.status !== 200 || !response.data || response.data.length === 0) { console.warn(`Get token info failed. Error code: ${response.status}`); return undefined; } const item = response.data[0]; return { address: item.id, name: item.name, symbol: item.symbol, decimals: item.decimals, supply: item.totalSupply, imageUrl: item.icon, social: { website: item.website, twitter: item.twitter, telegram: item.telegram, }, }; } catch (e) { console.error(`❌ Error get token info of ${tokenAddress.slice(0, 8)}. Error: ${e.message}`); return undefined; } } async transferBalance(fromKeypair, toAddresses, amount) { const batchSize = 10; const signatures = {}; for (let i = 0; i < toAddresses.length; i += batchSize) { const batchToAddresses = toAddresses.slice(i, i + batchSize); const promises = batchToAddresses.map(async (toAddress) => { try { const transaction = new web3_js_1.Transaction().add(web3_js_1.SystemProgram.transfer({ fromPubkey: fromKeypair.publicKey, toPubkey: new web3_js_1.PublicKey(toAddress), lamports: amount, })); // Get recent blockhash const { blockhash } = await this.connection.getLatestBlockhash(); transaction.recentBlockhash = blockhash; transaction.feePayer = fromKeypair.publicKey; transaction.add(web3_js_1.ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 50000, })); // Send and confirm transaction const signature = await (0, web3_js_1.sendAndConfirmTransaction)(this.connection, transaction, [fromKeypair], { skipPreflight: true, commitment: "confirmed", maxRetries: 3, }); console.log(`✅ Transfer native balance to ${toAddress.slice(0, 8)} successfully. Hash: ${signature}`); signatures[toAddress] = signature; } catch (e) { console.error(`❌ Error transfer native balance to ${toAddress.slice(0, 8)}. Error: ${e.message}`); } }); await Promise.all(promises); } return signatures; } async createToken(tokenParams, ownerKeypair) { return this.tokenCreator.createToken(tokenParams, ownerKeypair, true, true); } async launchToken(launchExchange, tokenParams, launchParams, ownerKeypair) { try { const exchangeHandler = (0, utils_js_1.getExchangeHandler)(launchExchange, this.rpcUrl); if (!exchangeHandler) { console.log('❌ Exchange handler not found'); return undefined; } const exchangeKind = (0, utils_js_1.getExchangeKind)(launchExchange); if (exchangeKind === types_js_1.ExchangeKind.Dex) { const dexLaunchParams = launchParams; const tokenAddress = await this.createToken(tokenParams, ownerKeypair); const { lpAddress } = await exchangeHandler.createPool(tokenAddress, dexLaunchParams.tokenAmount, dexLaunchParams.nativeAmount, ownerKeypair, this.testnet); return { exchangeType: launchExchange, tokenAddress: tokenAddress, lpAddress: lpAddress }; } } catch (e) { throw e; } } async startBoostToken(launchExchange, boostParams, walletKeypaires) { return ""; // HM - Test } async pauseBoostToken(boostId) { return false; // HM - Test } async resumeBoostToken(boostId) { return false; // HM - Test } async stopBoostToken(boostId) { return false; // HM - Test } async startTradeVolume(launchExchange, tradeParams, walletKeypaires) { return ""; // HM - Test } async pauseTradeVolume(tradeId) { return false; // HM - Test } async resumeTradeVolume(tradeId) { return false; // HM - Test } async stopTradeVolume(tradeId) { return false; // HM - Test } async sellToken(sellParams, walletKeypaires, ownerKeypair) { return ""; // HM - Test } async pauseSellToken(sellId) { return false; // HM - Test } async resumeSellToken(sellId) { return false; // HM - Test } async stopSellToken(sellId) { return false; // HM - Test } trackLiquidity(launchExchange, pairAddress) { return false; // HM - Test } stopTrackingLiquidity() { return false; // HM - Test } trackProfit(walletAddresses) { return false; // HM - Test } stopTrackingProfit() { return false; // HM - Test } on(event, callback) { return; } } exports.SolMM = SolMM; //# sourceMappingURL=mm.js.map