arbitrage-pro / index.html
steveadams2834's picture
Add 2 files
f0de8e9 verified
<!DOCTYPE html>
<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>