कस्टम गेम्स - प्रमाणित निष्पक्ष
कस्टम गेम्स में इसका उपयोग कैसे किया जाता है
YEET Original में हर बेट एक राउंड सीड से शुरू होती है। राउंड सीड आपके क्लाइंट सीड और बेट के नॉनस (nonce) का HMAC-SHA256 है, जिसे YEET द्वारा चुने गए सर्वर सीड से की (key) किया गया है। इसके बाद गेम उस राउंड सीड से बेट के लिए जरूरी हर रैंडम वैल्यू निकालता है। सर्वर सीड खेलने से पहले आपको हैश करके दिखाया जाता है और आपके सीड पेयर को रोटेट करने पर इसे रिवील किया जाता है, ताकि आप पिछली किसी भी बेट की राउंड सीड को दोबारा कैलकुलेट कर सकें और चेक कर सकें कि बेट लगाने के बाद उसका रिजल्ट बदला नहीं गया है।
अन्य वेरिफायर मैच नहीं कर सकते
दूसरे कैसीनो के लिए बनाई गई वेरिफिकेशन साइटें रैंडम नंबर अलग तरह से जनरेट कर सकती हैं, इसलिए वहां YEET बेट को चेक करने पर रिजल्ट अलग मिल सकता है। YEET बेट्स को गेम की फेयरनेस विंडो के 'वेरिफाई' टैब में, या इस पेज पर दिए गए कोड के साथ वेरिफाई करें।
कन्वर्जन
एक रूपांतरण राउंड सीड की एंट्रॉपी को गेम के परिणाम में बदल देता है। हर ओरिजिनल गेम में आधारभूत तरीका समान है: unbiasedUint n समान संभावना वाली स्थितियों में से एक को चुनता है, और गेम यह जांचता है कि क्या वह स्थिति जीतती है। n में से s विजयी स्थितियों वाले चरण की संभावना s / n होती है।
यह पेज हर गेम के लिए रूपांतरण सूचीबद्ध नहीं करता है। नीचे दिया गया उदाहरण एक गेम के साथ पैटर्न दिखाता है।
उदाहरण: लैम्ब चॉप
लैम्ब चॉप में 16 हॉप्स होते हैं, और प्रत्येक हॉप एक ही राउंड सीड से एक ड्रा है। हॉप h पर लेन में totalStart − h स्थान होते हैं, जिनमें से safeStart − h सुरक्षित हैं। सुरक्षित स्थानों की संख्या से कम का रोल सर्वाइव करता है। पहला रोल जो ऐसा नहीं करता है, वह राउंड को समाप्त कर देता है, और मल्टीप्लायर को क्लियर किए गए हॉप्स की संख्या के लिए पे-टेबल से पढ़ा जाता है।
const LAMB_CHOP_TOTAL_HOPS = 16;
const LAMB_CHOP_LANES = {
easy: [19, 21],
medium: [19, 23],
hard: [19, 25],
very_hard: [19, 27],
death_wish: [20, 32],
};
const LAMB_CHOP_PAYTABLE = {
easy: [
1.0721, 1.1912, 1.3313, 1.4977, 1.6975, 1.94, 2.2384, 2.6115,
3.0863, 3.7036, 4.5266, 5.6583, 7.275, 9.7, 13.58, 20.37,
],
medium: [
1.1742, 1.4351, 1.7728, 2.216, 2.8069, 3.6089, 4.7194, 6.2925,
8.5807, 12.013, 17.3522, 26.0283, 40.9016, 68.1694, 122.705, 245.41,
],
hard: [
1.2763, 1.7017, 2.3023, 3.1657, 4.432, 6.3315, 9.2537, 13.8806,
21.4519, 34.323, 57.2051, 100.1089, 185.9166, 371.8333, 818.0333, 2045.0833,
],
very_hard: [
1.3784, 1.991, 2.928, 4.392, 6.7344, 10.5826, 17.0951, 28.4918,
49.2132, 88.5838, 167.325, 334.65, 717.1071, 1673.25, 4350.45, 13051.35,
],
death_wish: [
1.552, 2.5322, 4.2203, 7.1994, 12.5989, 22.6781, 42.1166, 80.9934,
161.9869, 338.7, 745.1401, 1738.6604, 4346.651, 11798.0529, 35394.1588, 120340.14,
],
};
async function verifyLambChopBet(serverSeed, clientSeed, nonce, volatility) {
const seed = await deriveGameSeed(serverSeed, clientSeed, nonce);
const result = await verifyLambChopFromSeed(seed, volatility);
return { serverSeed, clientSeed, nonce, ...result };
}
async function verifyLambChopFromSeed(seed, volatility) {
const lane = LAMB_CHOP_LANES[volatility];
if (!lane) throw new Error(`No lamb-chop lane geometry for risk profile '${volatility}'.`);
const [safeStart, totalStart] = lane;
const entropy = new GameEntropy(hexToBytes(seed));
const hops = [];
let bustIndex = LAMB_CHOP_TOTAL_HOPS;
for (let hop = 0; hop < LAMB_CHOP_TOTAL_HOPS; hop++) {
const safePositions = safeStart - hop;
const totalPositions = totalStart - hop;
const roll = await unbiasedUint(entropy, totalPositions);
const survived = roll < safePositions;
hops.push({
hop,
safePositions,
totalPositions,
chance: safePositions / totalPositions,
roll,
survived,
});
if (!survived) {
bustIndex = hop;
break;
}
}
return {
seed,
entropyCursor: entropy.cursor,
volatility,
hops,
bustIndex,
clearedAllHops: bustIndex >= LAMB_CHOP_TOTAL_HOPS,
maxReachableMultiplier: lambChopMultiplierFor(volatility, bustIndex),
paytable: LAMB_CHOP_PAYTABLE[volatility],
};
}
function lambChopMultiplierFor(volatility, hopCount) {
if (hopCount < 1) return 0;
const row = LAMB_CHOP_PAYTABLE[volatility];
if (!row) throw new Error(`No lamb-chop paytable for risk profile '${volatility}'.`);
const multiplier = row[hopCount - 1];
if (multiplier === undefined) {
throw new Error(`No lamb-chop paytable row for ${volatility} at ${hopCount} hop(s).`);
}
return multiplier;
}
// Use the revealed server seed (64 hex characters) and the client seed and nonce shown on the bet.
console.log(await verifyLambChopBet(
'REVEALED_SERVER_SEED',
'yeetdemo-7f3a91',
'1842',
'easy'
));