Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>ArbitragePro by Hash Capital Research | Stablecoin Yield Optimizer</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/luxon@3.0.1"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/chartjs-adapter-luxon@1.2.0"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-tooltip@1.0.0"></script> | |
| <style> | |
| .gradient-bg { | |
| background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%); | |
| } | |
| .card-hover { | |
| transition: all 0.3s ease; | |
| } | |
| .card-hover:hover { | |
| transform: translateY(-5px); | |
| box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); | |
| } | |
| .loading-placeholder { | |
| color: transparent; | |
| background: linear-gradient(90deg, #e2e8f0, #cbd5e1, #e2e8f0); | |
| background-size: 200% 100%; | |
| animation: shimmer 1.5s infinite; | |
| border-radius: 4px; | |
| } | |
| @keyframes shimmer { | |
| 0% { background-position: 200% 0; } | |
| 100% { background-position: -200% 0; } | |
| } | |
| .tooltip-icon { | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 16px; | |
| height: 16px; | |
| border-radius: 50%; | |
| background-color: #94a3b8; | |
| color: white; | |
| font-size: 10px; | |
| margin-left: 4px; | |
| cursor: help; | |
| } | |
| .flow-step { | |
| position: relative; | |
| } | |
| .flow-step:not(:last-child)::after { | |
| content: "→"; | |
| position: absolute; | |
| right: -1rem; | |
| top: 50%; | |
| transform: translateY(-50%); | |
| color: #94a3b8; | |
| font-size: 1.5rem; | |
| } | |
| .formula-box { | |
| background: white; | |
| border-radius: 8px; | |
| padding: 1.5rem; | |
| margin: 2rem 0; | |
| color: #1e293b; | |
| font-family: monospace; | |
| text-align: center; | |
| font-size: 1.1rem; | |
| box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); | |
| } | |
| </style> | |
| </head> | |
| <body class="gradient-bg text-gray-900 min-h-screen font-sans"> | |
| <!-- Header --> | |
| <header class="container mx-auto px-4 py-6 flex justify-between items-center"> | |
| <div class="flex items-center space-x-2"> | |
| <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-blue-600" fill="none" viewBox="0 0 24 24" stroke="currentColor"> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" /> | |
| </svg> | |
| <span class="text-2xl font-bold"> | |
| ArbitragePro by Hash Capital Research | |
| </span> | |
| </div> | |
| <button id="connectWalletBtn" class="bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-6 rounded-full flex items-center space-x-2 transition-all duration-300 shadow"> | |
| <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor"> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" /> | |
| </svg> | |
| <span>Connect Wallet</span> | |
| </button> | |
| </header> | |
| <!-- Main Content --> | |
| <main class="container mx-auto px-4 py-8"> | |
| <!-- Hero Section --> | |
| <section class="text-center mb-16"> | |
| <h1 class="text-4xl md:text-5xl font-bold mb-4 leading-tight"> | |
| Maximize Your Stablecoin <span class="text-blue-600">Returns</span> | |
| </h1> | |
| <p class="text-xl text-gray-600 max-w-3xl mx-auto mb-8"> | |
| Automated cross-exchange arbitrage between USDC, USDT, and DAI with historical returns of 10-20% monthly. | |
| </p> | |
| <div class="flex justify-center space-x-4"> | |
| <button id="startEarningBtn" class="bg-blue-600 hover:bg-blue-700 text-white font-medium py-3 px-8 rounded-full transition-all duration-300 shadow"> | |
| Start Earning | |
| </button> | |
| <button class="border border-blue-600 text-blue-600 hover:bg-blue-50 font-medium py-3 px-8 rounded-full transition-all duration-300"> | |
| How It Works | |
| </button> | |
| </div> | |
| </section> | |
| <!-- Protocol Stats --> | |
| <section class="mb-16"> | |
| <div class="grid grid-cols-1 md:grid-cols-3 gap-6"> | |
| <div class="bg-white rounded-xl p-6 card-hover shadow" aria-label="Assets Under Management"> | |
| <div class="flex justify-between items-center"> | |
| <div class="stat-value text-3xl font-bold text-blue-600" id="aumValue"> | |
| $<span class="loading-placeholder">––.–</span>M | |
| </div> | |
| <div class="relative group"> | |
| <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor"> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /> | |
| </svg> | |
| <div class="absolute z-10 right-0 mt-2 w-64 bg-white shadow-lg rounded-lg p-3 text-sm text-gray-600 hidden group-hover:block"> | |
| Last updated: <span id="aumTimestamp">––/––/–– ––:––</span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="stat-label text-gray-500 mt-2">Assets Under Management</div> | |
| </div> | |
| <div class="bg-white rounded-xl p-6 card-hover shadow" aria-label="Active Wallets"> | |
| <div class="flex justify-between items-center"> | |
| <div class="stat-value text-3xl font-bold text-blue-600" id="holderCount"> | |
| <span class="loading-placeholder">–––</span> | |
| </div> | |
| <div class="relative group"> | |
| <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor"> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /> | |
| </svg> | |
| <div class="absolute z-10 right-0 mt-2 w-64 bg-white shadow-lg rounded-lg p-3 text-sm text-gray-600 hidden group-hover:block"> | |
| Last updated: <span id="holdersTimestamp">––/––/–– ––:––</span> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="stat-label text-gray-500 mt-2">Active Wallets</div> | |
| </div> | |
| <div class="bg-white rounded-xl p-6 card-hover shadow" aria-label="Monthly Retention"> | |
| <div class="stat-value text-3xl font-bold text-blue-600">93%</div> | |
| <div class="stat-label text-gray-500 mt-2">6-Month Retention</div> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- Performance Charts --> | |
| <section class="mb-16"> | |
| <h2 class="text-2xl font-semibold mb-6">Historical Performance</h2> | |
| <div class="grid grid-cols-1 lg:grid-cols-2 gap-8"> | |
| <div class="bg-white rounded-xl p-6 card-hover shadow" aria-label="AUM Over Time Chart"> | |
| <h3 class="text-lg font-medium mb-4">AUM Over Time</h3> | |
| <div class="h-64"> | |
| <canvas id="aumChart"></canvas> | |
| </div> | |
| <p class="text-sm text-gray-500 mt-2">AUM Raised to Date</p> | |
| </div> | |
| <div class="bg-white rounded-xl p-6 card-hover shadow" aria-label="Limit vs Declining Returns Chart"> | |
| <h3 class="text-lg font-medium mb-4">Limit vs. Declining Returns</h3> | |
| <div class="h-64"> | |
| <canvas id="returnsChart"></canvas> | |
| </div> | |
| <p class="text-sm text-gray-500 mt-2">Larger pools → lower arbitrage %</p> | |
| </div> | |
| </div> | |
| </section> | |
| <!-- How It Works --> | |
| <section class="mb-16"> | |
| <h2 class="text-2xl font-semibold mb-8 text-center">How It Works</h2> | |
| <div class="grid grid-cols-1 md:grid-cols-4 gap-6 mb-8"> | |
| <div class="flow-step text-center"> | |
| <div class="bg-blue-100 rounded-full h-16 w-16 flex items-center justify-center mx-auto mb-4"> | |
| <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-blue-600" fill="none" viewBox="0 0 24 24" stroke="currentColor"> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z" /> | |
| </svg> | |
| </div> | |
| <h3 class="font-medium flex items-center justify-center"> | |
| 1. Detect Spread | |
| <div class="tooltip-icon group"> | |
| <span class="hidden group-hover:block absolute -mt-24 w-48 bg-white shadow-lg rounded-lg p-2 text-sm text-gray-600"> | |
| Monitor 20+ exchanges for price discrepancies in real-time | |
| </span> | |
| ? | |
| </div> | |
| </h3> | |
| <p class="text-sm text-gray-500 mt-1">Monitor 20+ exchanges for price discrepancies</p> | |
| </div> | |
| <div class="flow-step text-center"> | |
| <div class="bg-blue-100 rounded-full h-16 w-16 flex items-center justify-center mx-auto mb-4"> | |
| <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-blue-600" fill="none" viewBox="0 0 24 24" stroke="currentColor"> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /> | |
| </svg> | |
| </div> | |
| <h3 class="font-medium flex items-center justify-center"> | |
| 2. Estimate Gas | |
| <div class="tooltip-icon group"> | |
| <span class="hidden group-hover:block absolute -mt-24 w-48 bg-white shadow-lg rounded-lg p-2 text-sm text-gray-600"> | |
| Calculate optimal transaction costs across multiple blockchains | |
| </span> | |
| ? | |
| </div> | |
| </h3> | |
| <p class="text-sm text-gray-500 mt-1">Calculate optimal transaction costs</p> | |
| </div> | |
| <div class="flow-step text-center"> | |
| <div class="bg-blue-100 rounded-full h-16 w-16 flex items-center justify-center mx-auto mb-4"> | |
| <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-blue-600" fill="none" viewBox="0 0 24 24" stroke="currentColor"> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4" /> | |
| </svg> | |
| </div> | |
| <h3 class="font-medium flex items-center justify-center"> | |
| 3. Execute Trades | |
| <div class="tooltip-icon group"> | |
| <span class="hidden group-hover:block absolute -mt-24 w-48 bg-white shadow-lg rounded-lg p-2 text-sm text-gray-600"> | |
| Simultaneous dual-leg transactions across multiple exchanges | |
| </span> | |
| ? | |
| </div> | |
| </h3> | |
| <p class="text-sm text-gray-500 mt-1">Simultaneous dual-leg transactions</p> | |
| </div> | |
| <div class="flow-step text-center"> | |
| <div class="bg-blue-100 rounded-full h-16 w-16 flex items-center justify-center mx-auto mb-4"> | |
| <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-blue-600" fill="none" viewBox="0 0 24 24" stroke="currentColor"> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" /> | |
| </svg> | |
| </div> | |
| <h3 class="font-medium flex items-center justify-center"> | |
| 4. Capture Profit | |
| <div class="tooltip-icon group"> | |
| <span class="hidden group-hover:block absolute -mt-24 w-48 bg-white shadow-lg rounded-lg p-2 text-sm text-gray-600"> | |
| Secure risk-free arbitrage gains after all fees | |
| </span> | |
| ? | |
| </div> | |
| </h3> | |
| <p class="text-sm text-gray-500 mt-1">Secure risk-free arbitrage gains</p> | |
| </div> | |
| </div> | |
| <div class="formula-box"> | |
| Profit ≈ (Price<sub>DEX₁</sub> – Price<sub>DEX₂</sub>) × Volume – Gas<sub>₁</sub> – Gas<sub>₂</sub> | |
| </div> | |
| </section> | |
| </main> | |
| <!-- Footer --> | |
| <footer class="bg-white py-8 border-t border-gray-200"> | |
| <div class="container mx-auto px-4"> | |
| <div class="flex flex-col md:flex-row justify-between items-center"> | |
| <div class="flex items-center space-x-2 mb-4 md:mb-0"> | |
| <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-blue-600" fill="none" viewBox="0 0 24 24" stroke="currentColor"> | |
| <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" /> | |
| </svg> | |
| <span class="text-xl font-bold">ArbitragePro</span> | |
| </div> | |
| <div class="flex space-x-6"> | |
| <a href="#" class="text-gray-500 hover:text-gray-700 transition-colors">Terms</a> | |
| <a href="#" class="text-gray-500 hover:text-gray-700 transition-colors">Privacy</a> | |
| <a href="#" class="text-gray-500 hover:text-gray-700 transition-colors">Docs</a> | |
| <a href="#" class="text-gray-500 hover:text-gray-700 transition-colors">Contact</a> | |
| </div> | |
| </div> | |
| <div class="mt-8 pt-8 border-t border-gray-200 text-center text-gray-500 text-sm"> | |
| <p>© 2025 ArbitragePro. All rights reserved. Past performance is not indicative of future results.</p> | |
| </div> | |
| </div> | |
| </footer> | |
| <script> | |
| // Configuration data | |
| const config = { | |
| aum: 6.3, // in millions | |
| holders: 364, | |
| refreshInterval: 36 * 60 * 60 * 1000, // 36 hours in milliseconds | |
| growthRange: { min: 0.10, max: 0.30 }, // percentage | |
| aumHistory: [], | |
| holdersHistory: [], | |
| timestamps: [] | |
| }; | |
| // Initialize Charts | |
| document.addEventListener('DOMContentLoaded', function() { | |
| // Format current date | |
| const now = new Date(); | |
| const formattedDate = now.toLocaleDateString('en-US', { | |
| month: '2-digit', | |
| day: '2-digit', | |
| year: 'numeric', | |
| hour: '2-digit', | |
| minute: '2-digit', | |
| hour12: false | |
| }).replace(',', ''); | |
| // Initialize with current values | |
| updateMetrics(); | |
| document.getElementById('aumTimestamp').textContent = formattedDate; | |
| document.getElementById('holdersTimestamp').textContent = formattedDate; | |
| // Set up automatic refresh | |
| setInterval(updateMetrics, config.refreshInterval); | |
| // Update metrics with fractional growth | |
| function updateMetrics() { | |
| // Calculate random growth | |
| const growthRate = (Math.random() * | |
| (config.growthRange.max - config.growthRange.min) + | |
| config.growthRange.min) / 100; | |
| // Apply growth | |
| config.aum = parseFloat((config.aum * (1 + growthRate)).toFixed(2)); | |
| config.holders = Math.floor(config.holders * (1 + growthRate)); | |
| // Record history | |
| const now = new Date(); | |
| config.aumHistory.push(config.aum); | |
| config.holdersHistory.push(config.holders); | |
| config.timestamps.push(now); | |
| // Format date for display | |
| const formattedDate = now.toLocaleDateString('en-US', { | |
| month: '2-digit', | |
| day: '2-digit', | |
| year: 'numeric', | |
| hour: '2-digit', | |
| minute: '2-digit', | |
| hour12: false | |
| }).replace(',', ''); | |
| // Update UI | |
| document.getElementById('aumValue').innerHTML = `$${config.aum.toFixed(2)}M`; | |
| document.getElementById('holderCount').textContent = config.holders; | |
| document.getElementById('aumTimestamp').textContent = formattedDate; | |
| document.getElementById('holdersTimestamp').textContent = formattedDate; | |
| // Update charts | |
| updateAumChart(); | |
| } | |
| // AUM Chart | |
| const aumCtx = document.getElementById('aumChart').getContext('2d'); | |
| const aumChart = new Chart(aumCtx, { | |
| type: 'line', | |
| data: { | |
| datasets: [ | |
| { | |
| label: 'Monthly AUM (M)', | |
| data: [], | |
| borderColor: '#3b82f6', | |
| backgroundColor: 'rgba(59, 130, 246, 0.1)', | |
| borderWidth: 2, | |
| tension: 0.3, | |
| fill: true | |
| }, | |
| { | |
| label: 'Cumulative Raised', | |
| data: [], | |
| borderColor: '#8b5cf6', | |
| borderWidth: 1, | |
| borderDash: [5, 5], | |
| pointRadius: 0, | |
| fill: false | |
| } | |
| ] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| plugins: { | |
| legend: { | |
| display: false | |
| }, | |
| tooltip: { | |
| callbacks: { | |
| title: function(context) { | |
| const date = new Date(context[0].raw.x); | |
| return date.toLocaleDateString('en-US', { | |
| month: 'short', | |
| day: 'numeric', | |
| year: 'numeric', | |
| hour: '2-digit', | |
| minute: '2-digit' | |
| }); | |
| }, | |
| label: function(context) { | |
| let label = context.dataset.label || ''; | |
| if (label) { | |
| label += ': '; | |
| } | |
| if (context.parsed.y !== null) { | |
| label += '$' + context.parsed.y.toFixed(2) + 'M'; | |
| } | |
| return label; | |
| } | |
| } | |
| } | |
| }, | |
| scales: { | |
| x: { | |
| type: 'time', | |
| time: { | |
| unit: 'day', | |
| tooltipFormat: 'MMM d, yyyy h:mm a' | |
| }, | |
| grid: { | |
| display: false | |
| } | |
| }, | |
| y: { | |
| beginAtZero: false, | |
| grid: { | |
| color: 'rgba(0, 0, 0, 0.05)' | |
| }, | |
| ticks: { | |
| callback: function(value) { | |
| return value.toFixed(1) + 'M'; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }); | |
| function updateAumChart() { | |
| // Calculate cumulative AUM | |
| let cumulativeAum = 0; | |
| const cumulativeData = config.aumHistory.map((aum, index) => { | |
| cumulativeAum += aum; | |
| return { | |
| x: config.timestamps[index], | |
| y: cumulativeAum | |
| }; | |
| }); | |
| // Update chart data | |
| aumChart.data.datasets[0].data = config.aumHistory.map((aum, index) => ({ | |
| x: config.timestamps[index], | |
| y: aum | |
| })); | |
| aumChart.data.datasets[1].data = cumulativeData; | |
| aumChart.update(); | |
| } | |
| // Returns Chart | |
| const returnsCtx = document.getElementById('returnsChart').getContext('2d'); | |
| const returnsChart = new Chart(returnsCtx, { | |
| type: 'line', | |
| data: { | |
| labels: ['0', '0.5', '1.0', '1.5', '2.0'], | |
| datasets: [{ | |
| label: 'Expected Return (%)', | |
| data: [20, 15, 10, 7, 5], | |
| borderColor: '#3b82f6', | |
| backgroundColor: 'rgba(59, 130, 246, 0.1)', | |
| borderWidth: 2, | |
| tension: 0.3, | |
| fill: true | |
| }] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| plugins: { | |
| legend: { | |
| display: false | |
| } | |
| }, | |
| scales: { | |
| y: { | |
| beginAtZero: true, | |
| grid: { | |
| color: 'rgba(0, 0, 0, 0.05)' | |
| }, | |
| ticks: { | |
| callback: function(value) { | |
| return value + '%'; | |
| } | |
| } | |
| }, | |
| x: { | |
| grid: { | |
| display: false | |
| }, | |
| title: { | |
| display: true, | |
| text: 'AUM (Billion USD)' | |
| } | |
| } | |
| } | |
| } | |
| }); | |
| // Initialize with some historical data for demo | |
| function initializeDemoData() { | |
| const now = new Date(); | |
| const demoDates = []; | |
| const demoAum = []; | |
| const demoHolders = []; | |
| // Generate 12 months of data | |
| for (let i = 11; i >= 0; i--) { | |
| const date = new Date(now); | |
| date.setMonth(now.getMonth() - i); | |
| demoDates.push(date); | |
| // Calculate AUM with random growth | |
| let aum = config.aum; | |
| for (let j = 0; j < i; j++) { | |
| const growth = (Math.random() * | |
| (config.growthRange.max - config.growthRange.min) + | |
| config.growthRange.min) / 100; | |
| aum = aum * (1 + growth); | |
| } | |
| demoAum.push(parseFloat(aum.toFixed(2))); | |
| // Calculate holders with similar growth | |
| let holders = config.holders; | |
| for (let j = 0; j < i; j++) { | |
| const growth = (Math.random() * | |
| (config.growthRange.max - config.growthRange.min) + | |
| config.growthRange.min) / 100; | |
| holders = Math.floor(holders * (1 + growth)); | |
| } | |
| demoHolders.push(holders); | |
| } | |
| config.aumHistory = demoAum; | |
| config.holdersHistory = demoHolders; | |
| config.timestamps = demoDates; | |
| updateAumChart(); | |
| } | |
| // Run demo data initialization | |
| initializeDemoData(); | |
| }); | |
| </script> | |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=steveadams2834/arbitrage-pro" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
| </html> |