Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>BTC Key Finder</title> | |
| <link rel="icon" type="image/x-icon" href="/static/favicon.ico"> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/animejs/lib/anime.iife.min.js"></script> | |
| <script src="https://unpkg.com/feather-icons"></script> | |
| <style> | |
| .gradient-bg { | |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | |
| } | |
| .card-glow { | |
| box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2); | |
| } | |
| .animate-pulse-slow { | |
| animation: pulse 3s cubic-bezier(0.4, 0, 0.6, 1) infinite; | |
| } | |
| </style> | |
| </head> | |
| <body class="gradient-bg min-h-screen flex items-center justify-center p-4"> | |
| <div class="bg-white rounded-2xl shadow-2xl p-8 max-w-md w-full card-glow"> | |
| <div class="text-center mb-8"> | |
| <div class="w-16 h-16 bg-purple-100 rounded-full flex items-center justify-center mx-auto mb-4"> | |
| <i data-feather="key" class="w-8 h-8 text-purple-600"></i> | |
| </div> | |
| <h1 class="text-3xl font-bold text-gray-800 mb-2">BTC Key Finder</h1> | |
| <p class="text-gray-600">Find Bitcoin private keys with various derivation strategies</p> | |
| </div> | |
| <div class="space-y-6"> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">Input Type</label> | |
| <select class="w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" id="inputType"> | |
| <option value="hex">Hex Seed</option> | |
| <option value="mnemonic">Mnemonic Phrase</option> | |
| </select> | |
| </div> | |
| <div id="hexInput" class="input-section"> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">Hex Seed</label> | |
| <input type="text" placeholder="Enter 64-character hex seed" class="w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" id="hexSeed"> | |
| </div> | |
| <div id="mnemonicInput" class="input-section hidden"> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">Mnemonic Phrase</label> | |
| <textarea placeholder="Enter BIP-39 mnemonic words" class="w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" rows="3" id="mnemonic"></textarea> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">Passphrase (optional)</label> | |
| <input type="text" placeholder="Enter passphrase" class="w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" id="passphrase"> | |
| </div> | |
| <div class="grid grid-cols-2 gap-4"> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">PBKDF2 Count</label> | |
| <input type="number" value="10" min="1" max="100" class="w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" id="pbkdf2Count"> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">HD Count</label> | |
| <input type="number" value="20" min="1" max="100" class="w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" id="hdCount"> | |
| </div> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">Pattern Count</label> | |
| <input type="number" value="10" min="1" max="100" class="w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" id="patternCount"> | |
| </div> | |
| <div> | |
| <label class="block text-sm font-medium text-gray-700 mb-2">Vanity Prefix (optional)</label> | |
| <input type="text" placeholder="e.g. 1H8U" class="w-full p-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent" id="vanity"> | |
| </div> | |
| <button class="w-full bg-purple-600 text-white py-3 px-4 rounded-lg font-medium hover:bg-purple-700 transition-colors duration-200 flex items-center justify-center gap-2" id="findKeys" onclick="executeBitcoinFinder()"> | |
| <i data-feather="search" class="w-4 h-4"></i> | |
| Execute BTC Key Finder | |
| </button> | |
| </div> | |
| <div class="mt-8 text-center"> | |
| <a href="index.html" class="text-purple-600 hover:text-purple-800 font-medium inline-flex items-center gap-1"> | |
| <i data-feather="arrow-left" class="w-4 h-4"></i> | |
| Back to Home | |
| </a> | |
| </div> | |
| </div> | |
| <script> | |
| // Input type toggle | |
| const inputType = document.getElementById('inputType'); | |
| const hexInput = document.getElementById('hexInput'); | |
| const mnemonicInput = document.getElementById('mnemonicInput'); | |
| inputType.addEventListener('change', function() { | |
| if (this.value === 'hex') { | |
| hexInput.classList.remove('hidden'); | |
| mnemonicInput.classList.add('hidden'); | |
| } else { | |
| hexInput.classList.add('hidden'); | |
| mnemonicInput.classList.remove('hidden'); | |
| } | |
| }); | |
| // Initialize Feather icons | |
| feather.replace(); | |
| // Add animation to the button | |
| document.getElementById('findKeys').addEventListener('mouseenter', function() { | |
| anime({ | |
| targets: this, | |
| scale: 1.05, | |
| duration: 200, | |
| easing: 'easeInOutQuad' | |
| }); | |
| }); | |
| document.getElementById('findKeys').addEventListener('mouseleave', function() { | |
| anime({ | |
| targets: this, | |
| scale: 1, | |
| duration: 200, | |
| easing: 'easeInOutQuad' | |
| }); | |
| }); | |
| // Direct Bitcoin Finder Execution | |
| function executeBitcoinFinder() { | |
| const inputType = document.getElementById('inputType').value; | |
| const hexSeed = document.getElementById('hexSeed').value; | |
| const mnemonic = document.getElementById('mnemonic').value; | |
| const passphrase = document.getElementById('passphrase').value; | |
| const pbkdf2Count = document.getElementById('pbkdf2Count').value; | |
| const hdCount = document.getElementById('hdCount').value; | |
| const patternCount = document.getElementById('patternCount').value; | |
| const vanity = document.getElementById('vanity').value; | |
| // Basic validation | |
| if (inputType === 'hex' && (!hexSeed || hexSeed.length !== 64)) { | |
| alert('Please enter a valid 64-character hex seed'); | |
| return; | |
| } | |
| if (inputType === 'mnemonic' && !mnemonic.trim()) { | |
| alert('Please enter a mnemonic phrase'); | |
| return; | |
| } | |
| const requestData = { | |
| seed_type: inputType, | |
| seed: inputType === 'hex' ? hexSeed : mnemonic, | |
| passphrase: passphrase, | |
| pbkdf2_count: parseInt(pbkdf2Count), | |
| hd_count: parseInt(hdCount), | |
| pattern_count: parseInt(patternCount), | |
| vanity: vanity | |
| }; | |
| // Execute via Python backend | |
| fetch('/api/bitcoin-finder', { | |
| method: 'POST', | |
| headers: { | |
| 'Content-Type': 'application/json', | |
| 'X-Requested-With': 'XMLHttpRequest' | |
| }) | |
| .then(response => response.json()) | |
| .then(data => { | |
| console.log('Bitcoin Finder Results:', data); | |
| alert('BTC Key Finder executed successfully! Generated ' + data.candidates.length + ' candidates. Found ' + data.matches.length + ' vanity matches. Check console for full report.'); | |
| }) | |
| .catch(error => { | |
| console.error('Error:', error); | |
| alert('Execution failed. Check console for details.'); | |
| }); | |
| } | |
| </script> | |
| </body> | |
| </html> |