enfejar-بازی-انفجار
by jnjmz
HTML
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ابزار اعتبارسنجی الگوریتم بازی انفجار | Enfejar.me</title>
</head>
<body>
<div class="container">
<header class="header">
<h1>اثبات شفافیت الگوریتم (Provably Fair)</h1>
<p>این ابزار جهت اعتبارسنجی کدهای هش و ضرایب بازی در سایت <strong>Enfejar.me</strong> طراحی شده است.</p>
</header>
<!-- بخش اعتبارسنجی دستی -->
<div class="card">
<h2 class="card-title">اعتبارسنجی دستی</h2>
<div class="form-group">
<label for="md5Input">کد MD5 راند:</label>
<input type="text" id="md5Input" placeholder="مثال: 5df7a5d83547fd8fb4fba9183ab6b7c4">
</div>
<div class="form-group">
<label for="multiInput">ضریب بازی (Crash Point):</label>
<input type="number" id="multiInput" step="0.01" placeholder="مثال: 2.46">
</div>
<button class="btn" onclick="verifyManual()">محاسبه HASH</button>
<div id="resultBox" class="result-box">
<div class="result-label">HASH تولید شده (SHA-256):</div>
<div id="hashOutput" style="font-family: monospace; font-size: 1.1rem; color: #fff;"></div>
</div>
</div>
<!-- بخش بررسی خودکار راندهای سایت -->
<div class="card">
<h2 class="card-title">بررسی زنده از سایت رسمی</h2>
<p style="color: var(--text-muted); font-size: 0.9rem; margin-bottom: 20px;">با استفاده از دکمه زیر، ۱۰ راند آخر مستقیماً از سرورهای Enfejar.me دریافت شده و اعتبار الگوریتم آنها در مرورگر شما بررسی میشود.</p>
<button class="btn btn-secondary" onclick="fetchLatestRounds()">دریافت ۱۰ راند آخر و اعتبارسنجی</button>
<div id="tableContainer" class="table-responsive"...
CSS
:root {
--bg-dark: #121212;
--card-bg: #1e1e24;
--primary: #e68927;
--primary-hover: #c77520;
--success: #2e7d32;
--danger: #d32f2f;
--text-light: #ffffff;
--text-muted: #a0a0a0;
--border-color: #333;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
font-family: Tahoma, 'Segoe UI', sans-serif;
}
body {
background-color: var(--bg-dark);
color: var(--text-light);
line-height: 1.6;
padding: 20px;
}
.container {
max-width: 900px;
margin: 0 auto;
}
.header {
text-align: center;
margin-bottom: 40px;
padding-bottom: 20px;
border-bottom: 1px solid var(--border-color);
}
.header h1 {
color: var(--primary);
margin-bottom: 10px;
}
.header p {
color: var(--text-muted);
font-size: 0.95rem;
}
.card {
background: var(--card-bg);
border-radius: 12px;
padding: 25px;
margin-bottom: 30px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.2);
border: 1px solid var(--border-color);
}
.card-title {
color: var(--primary);
margin-bottom: 20px;
font-size: 1.2rem;
display: flex;
align-items: center;
gap: 10px;
}
.form-group {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 8px;
font-size: 0.9rem;
color: var(--text-muted);
}
input[type="text"], input[type="number"] {
width: 100%;
...
JavaScript
async function generateSHA256(text) {
const msgBuffer = new TextEncoder().encode(text);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
async function verifyManual() {
const md5 = document.getElementById('md5Input').value.trim();
const multi = document.getElementById('multiInput').value.trim();
if (!md5 || !multi) {
alert('لطفاً هم کد MD5 و هم ضریب را وارد کنید.');
return;
}
const formattedMulti = parseFloat(multi).toFixed(2);
const combinedString = md5 + formattedMulti;
const hash = await generateSHA256(combinedString);
document.getElementById('hashOutput').innerText = hash;
document.getElementById('resultBox').classList.add('show');
}
async function fetchLatestRounds() {
const tbody = document.getElementById('historyBody');
tbody.innerHTML = '<tr><td colspan="4" style="text-align:center; padding: 20px;">در حال دریافت اطلاعات...</td></tr>';
document.getElementById('tableContainer').style.display = 'block';
try {
// تلاش برای دریافت فایل history.json از سایت
const response = await fetch('https://enfejar.me/history.json', { cache: "no-store" });
if (!response.ok) {
throw new Error('عدم دسترسی به سرور');
}
const data = await response.json();
const latest10 = data.slice(0, 10);
tbody.innerHTML = '';
for (const round of latest10) {
// محاسبه هش در مرورگر کاربر
const...