lmajowka/btc-random

correção para rodar no linux

Opened this issue · 0 comments

import CoinKey from 'coinkey';
import walletsArray from './wallets.js';
import chalk from 'chalk';
import fs from 'fs';
import crypto from 'crypto';

const walletsSet = new Set(walletsArray);

async function encontrarBitcoins(key, min, max, shouldStop, rand = 0) {
let segundos = 0;
let pkey = 0;
let um = 0;
if (rand === 0) {
um = BigInt(1);
} else {
um = BigInt(rand);
}

const startTime = Date.now();

let zeroes = new Array(65).fill('');
for (let i = 1; i < 64; i++) {
    zeroes[i] = '0'.repeat(64 - i);
}

console.log('Buscando Bitcoins...');

key = getRandomBigInt(min, max);

const executeLoop = async () => {
    while (!shouldStop()) {
        key += um;
        pkey = key.toString(16);
        pkey = `${zeroes[pkey.length]}${pkey}`;

        if (Date.now() - startTime > segundos) {
            segundos += 1000;
            console.log(segundos / 1000);
            if (segundos % 10000 == 0) {
                const tempo = (Date.now() - startTime) / 1000;
                console.clear();
                console.log('Resumo: ');
                console.log('Ultima chave tentada: ', pkey);

                const filePath = 'Ultima_chave.txt';  // File path to write to
                const content = `Ultima chave tentada: ${pkey}`;
                try {
                    fs.writeFileSync(filePath, content, 'utf8');
                } catch (err) {
                    console.error('Error writing to file:', err);
                }

                key = getRandomBigInt(min, max);

                if (key >= max) {
                    key = min;
                }
            }
        }

        let publicKey = generatePublic(pkey);
        if (walletsSet.has(publicKey)) {
            const tempo = (Date.now() - startTime) / 1000;
            console.log('Velocidade:', (Number(key) - Number(min)) / tempo, ' chaves por segundo');
            console.log('Tempo:', tempo, ' segundos');
            console.log('Private key:', chalk.green(pkey));
            console.log('WIF:', chalk.green(generateWIF(pkey)));

            const filePath = 'keys.txt';
            const lineToAppend = `Private key: ${pkey}, WIF: ${generateWIF(pkey)}\n`;

            try {
                fs.appendFileSync(filePath, lineToAppend);
                console.log('Chave escrita no arquivo com sucesso.');
            } catch (err) {
                console.error('Erro ao escrever chave em arquivo:', err);
            }

            throw 'ACHEI!!!! 🎉🎉🎉🎉🎉';
        }
    }
    await new Promise(resolve => setImmediate(resolve));
};
await executeLoop();

}

function generatePublic(privateKey) {
if (!privateKey) {
throw new Error('Invalid private key');
}
let _key = new CoinKey(Buffer.from(privateKey, 'hex'));
_key.compressed = true;
return _key.publicAddress;
}

function generateWIF(privateKey) {
if (!privateKey) {
throw new Error('Invalid private key');
}
let _key = new CoinKey(Buffer.from(privateKey, 'hex'));
return _key.privateWif;
}

function getRandomBigInt(min, max) {
if (min >= max) {
throw new Error('min should be less than max');
}

// Calculate the range
const range = max - min;

// Generate a random BigInt within the range
const randomBigIntInRange = BigInt(`0x${crypto.randomBytes(32).toString('hex')}`) % range;

// Add the minimum value to get a number within the desired range
const randomBigInt = min + randomBigIntInRange;

return randomBigInt;

}

export default encontrarBitcoins;