Özel Oyunlar - Kanıtlanabilir Adil
Özel Oyunlarda Nasıl Kullanılır
YEET Original oyunlarındaki her bahis bir round seed ile başlar. Round seed, client seed'inizin ve bahsin nonce değerinin, YEET tarafından seçilen bir server seed ile anahtarlanmış HMAC-SHA256 özetidir. Oyun, o bahis için ihtiyaç duyduğu her rastgele değeri bu round seed'den çeker. Server seed, siz oynamadan önce size özetlenmiş (hashed) şekilde gösterilir ve seed çiftinizi değiştirdiğinizde açıklanır; böylece geçmişteki herhangi bir bahsin round seed'ini yeniden hesaplayabilir ve sonucun bahis yaptıktan sonra değiştirilmediğini kontrol edebilirsiniz.
Diğer doğrulayıcılar eşleşmeyebilir
Diğer kumarhaneler için oluşturulmuş doğrulama siteleri rastgele sayıları farklı şekilde üretebilir, bu nedenle bir YEET bahsini orada kontrol etmek farklı bir sonuç verebilir. YEET bahislerini, oyunun Adillik (Fairness) penceresindeki Doğrulama sekmesinden veya bu sayfadaki kod ile doğrulayın.
Dönüşümler
Bir dönüşüm, yuvarlak tohumunun entropisini bir oyun sonucuna çevirir. Temel yapı her Original oyununda aynıdır: unbiasedUint eşit olasılıklı n konumdan birini seçer ve oyun bu konumun kazanıp kazanmadığını kontrol eder. n üzerinden s kazandıran konuma sahip bir adımın olasılığı s / n'dir.
Bu sayfa her oyun için bir dönüşüm listelemez. Aşağıdaki örnek, bir oyunla bu düzeni göstermektedir.
Örnek: Lamb Chop
Lamb Chop 16 adımdan oluşur ve her adım aynı round seed değerinden bir çekiliştir. h adımında, şerit üzerinde totalStart − h pozisyon bulunur ve bunların safeStart − h tanesi güvenlidir. Güvenli pozisyon sayısının altındaki bir atış hayatta kalır. Başarısız olunan ilk atış turu bitirir ve çarpan, tamamlanan adım sayısına göre ödeme tablosundan okunur.
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'
));