@dinolab/crypto-mm
Version:
Crypto Market Maker
204 lines • 8.24 kB
JavaScript
;
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