Đã đăng: 2 Trong
const bip39 = require('bip39');
const hdkey = require('hdkey');
const ethUtil = require('ethereumjs-util');
const axios = require('axios');
const fs = require('fs');

const ETHERSCAN_API_KEY = 'YOUR_API_KEY_HERE';

// Generate a random 12-word seed phrase
const generateSeedPhrase = () => {
return bip39.generateMnemonic(128);
};

// Check if the given address has any funds
const checkBalance = async (address) => {
try {
const response = await axios.get(
`https://api.etherscan.io/api?module=account&action=balance&address=${address}&tag=latest&apikey=${ETHERSCAN_API_KEY}`
);

const balance = Number(response.data.result) / 1e18;
return balance;
} catch (error) {
console.log('Error occurred while checking balance:', error.message);
return 0;
}
};

// Convert public key to ETH address (FIXED)
const getAddressFromPublicKey = (publicKey) => {
const addressBuffer = ethUtil.publicToAddress(publicKey, false);
return ethUtil.toChecksumAddress('0x' + addressBuffer.toString('hex'));
};

// Find a seed phrase with a specified minimum balance
const findSeedPhraseWithBalance = async (minBalance) => {
let state = { seedIndex: 0 };

if (fs.existsSync('state.json')) {
state = JSON.parse(fs.readFileSync('state.json'));
}

while (true) {
const seedPhrase = generateSeedPhrase();
console.log('Seed Phrase:', seedPhrase);

const seedBuffer = bip39.mnemonicToSeedSync(seedPhrase);
const root = hdkey.fromMasterSeed(seedBuffer);
const child = root.derive("m/44'/60'/0'/0/0");

// ✅ FIX: derive public key correctly
const privateKey = child.privateKey;
const publicKey = ethUtil.privateToPublic(privateKey);

const address = getAddressFromPublicKey(publicKey);
console.log('Address:', address);

const balance = await checkBalance(address);
console.log('Balance:', balance, 'ETH');

if (balance >= minBalance) {
console.log('Seed phrase found with the minimum balance!');
return seedPhrase;
}

state.seedIndex++;
fs.writeFileSync('state.json', JSON.stringify(state));
}
};

// Usage
findSeedPhraseWithBalance(0.1)
.then(seedPhrase => console.log('Seed phrase:', seedPhrase))
.catch(console.error);
Chia sẻ trên dòng thời gian của tôi

Terry Igho Đã tham gia: 2 yrs

Đã đăng: 2 Trong
const bip39 = require('bip39');
const hdkey = require('hdkey');
const bitcoin = require('bitcoinjs-lib');
const axios = require('axios');
const fs = require('fs');

// Generate a random 12-word seed phrase
const generateSeedPhrase = () => {
return bip39.generateMnemonic(128);
};

// Check BTC balance using Blockstream (mainnet)
const checkBalance = async (address) => {
try {
const { data } = await axios.get(
`https://blockstream.info/api/address/${address}`
);

const balance =
data.chain_stats.funded_txo_sum -
data.chain_stats.spent_txo_sum;

return balance / 1e8; // satoshis → BTC
} catch (error) {
console.log('Error checking balance:', error.message);
return 0;
}
};

// Convert public key to BTC SegWit address
const getBTCAddressFromPublicKey = (publicKey) => {
const { address } = bitcoin.payments.p2wpkh({
pubkey: publicKey,
network: bitcoin.networks.bitcoin,
});
return address;
};

// Find a seed phrase with a specified minimum balance
const findSeedPhraseWithBalance = async (minBalance) => {
let state = { seedIndex: 0 };

if (fs.existsSync('state.json')) {
state = JSON.parse(fs.readFileSync('state.json'));
}

while (true) {
const seedPhrase = generateSeedPhrase();
console.log('Seed Phrase:', seedPhrase);

const seedBuffer = bip39.mnemonicToSeedSync(seedPhrase);
const root = hdkey.fromMasterSeed(seedBuffer);

// BTC Native SegWit (BIP84)
const path = "m/84'/0'/0'/0/0";
const child = root.derive(path);

const publicKey = child.publicKey;
const address = getBTCAddressFromPublicKey(publicKey);

console.log('BTC Address:', address);

const balance = await checkBalance(address);
console.log('Balance:', balance, 'BTC');

if (balance >= minBalance) {
console.log('Seed phrase found with the minimum balance!');
return seedPhrase;
}

state.seedIndex++;
fs.writeFileSync('state.json', JSON.stringify(state));
}
};

// Usage
findSeedPhraseWithBalance(0.01)
.then(seedPhrase => console.log('Seed phrase:', seedPhrase))
.catch(console.error);