Keadilan KAKALOT Originals: verifikasi sendiri tiap ronde
Setiap game KAKALOT Originals dibuat agar Anda dapat memeriksa bahwa setiap hasil sudah ditetapkan sebelum Anda bermain dan tidak diubah sesudahnya. Halaman ini menjelaskan idenya dan langkah-langkahnya, sehingga Anda tidak perlu sekadar percaya pada situs.
Idenya: kunci dulu, buka kemudian
Sebelum Anda bermain, sistem membuat nilai rahasia bernama server seed dan hanya menunjukkan komitmennya (SHA-256 dari server seed). Komitmen bekerja seperti amplop tersegel: situs tidak dapat mengubah rahasia itu kemudian tanpa membuat hash-nya tidak lagi cocok.
Setiap hasil dihitung dari server seed, client seed (nilai dari sisi Anda) dan nomor ronde (nonce) dengan HMAC-SHA256. Saat Anda menekan "Rotate seed", server seed lama dibuka, sehingga Anda dapat menghitung ulang setiap ronde yang dimainkan dengannya sendiri.
Cara memverifikasi sebuah ronde
- Sebelum bermain, catat komitmen seed saat ini (hash server seed), client seed dan nonce.
- Bermain seperti biasa. Setiap ronde memiliki ID ronde dan muncul di riwayat taruhan Anda.
- Tekan "Rotate seed and reveal the old one". Server seed dari pasangan sebelumnya ditampilkan.
- Periksa bahwa SHA-256 dari server seed yang dibuka sama dengan komitmen yang Anda lihat sebelum bermain. Jika cocok, situs tidak mengubah nilainya setelah Anda mulai.
- Hitung HMAC-SHA256 dengan server seed sebagai kunci dan format pesan game itu (tabel di bawah), lalu bandingkan dengan hasil ronde.
- Atau tekan "Verify" di halaman game: browser Anda menghitung ulang semuanya untuk Anda, tanpa memercayai hasil dari server.
Format pesan yang dipakai tiap game
Contoh memakai client seed clientSeed dan nonce 7; nilai asli Anda ditampilkan di halaman game. Game yang memakai beberapa digest menghitungnya mulai dari 0.
| Game | Pesan |
|---|---|
| HEADS OR TAILS | clientSeed:7 |
| DRAGON'S VAULT | clientSeed:7:vault:0 , clientSeed:7:vault:1 |
| DROP CHAIN | clientSeed:7:drop:0 , clientSeed:7:drop:1 , ... |
| COIN FOX | clientSeed:7:reels:0 , clientSeed:7:reels:1 , ... |
| ROYAL INGOTS | clientSeed:7:ingot:0 , clientSeed:7:ingot:1 , ... |
| GOLDEN KICK | clientSeed:7:kick:0 , ... , clientSeed:7:kick:3 |
| FOXBALL | clientSeed:7:fb:0 , ... , clientSeed:7:fb:7 |
Undian Royal Jackpot memakai pesan tambahan. Untuk HEADS OR TAILS pesannya adalah clientSeed:7:jackpot, dan 6 byte pertama dari hasilnya adalah angka yang menentukan jackpot.
Kunci HMAC adalah byte dari server seed (heksadesimal: basis 16, 64 karakter). Setiap game punya aturannya sendiri untuk mengubah hasil menjadi koin, kartu atau papan; lihat panduan tiap game untuk detailnya.
Contoh kode: verifikasi HEADS OR TAILS
Kode di bawah ini berjalan di konsol browser Anda. Kode ini memeriksa komitmen dan lemparan koin dari satu ronde (pesan clientSeed:nonce).
const hex = (s) => Uint8Array.from(s.match(/../g).map((h) => parseInt(h, 16)));
const toHex = (b) => [...new Uint8Array(b)].map((x) => x.toString(16).padStart(2, '0')).join('');
async function verifyCoin(serverSeed, serverHash, clientSeed, nonce, coins) {
const seed = hex(serverSeed);
const hashOk = toHex(await crypto.subtle.digest('SHA-256', seed)) === serverHash;
const key = await crypto.subtle.importKey('raw', seed, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
const digest = new Uint8Array(await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(clientSeed + ':' + nonce)));
let result = '';
for (let i = 0; i < coins; i++) result += digest[i] & 1 ? 'T' : 'H';
return { hashOk, result };
}ID ronde dan rantai hash
Setiap ronde memiliki ID ronde berurutan yang unik, seperti RI-0000001 untuk ROYAL INGOTS uang sungguhan dan DI- untuk demo. Setiap game punya awalannya sendiri, dan ID ronde tampil di halaman game dan di riwayat taruhan Anda.
Basis data menyimpan rantai hash dari ronde-ronde berurutan: hash tiap ronde memuat hash ronde sebelumnya, ID ronde, komitmen seed, client seed, nonce dan hasil. Jika sebuah ronde diubah atau disisipkan kemudian, rantai akan putus dan tidak lagi cocok dengan semua ronde sesudahnya.
ROYAL BACCARAT: setiap kartu dikunci
Baccarat mengunci seluruh shoe. Saat shoe dibuka, 416 kartunya (8 dek) diacak dan setiap kartu dikunci dengan komitmen SHA-512 dari teks "position:card:salt". Saat kartu dibagikan, salt-nya dibuka sehingga Anda dapat memeriksa bahwa kartu yang dibagikan sesuai dengan yang dikunci sebelum tangan pertama. Saat shoe berakhir, seed-nya dibuka sehingga seluruh pengacakan dapat diperiksa. Detailnya ada di panduan ROYAL BACCARAT.
Batasan yang perlu diketahui
Pemeriksaan semacam ini membuktikan bahwa hasil tidak diubah setelah Anda mulai dan dihitung menurut aturan yang dipublikasikan. Pemeriksaan ini tidak membuat ronde berikutnya dapat diprediksi dan tidak memperbaiki peluang Anda: setiap ronde tetap acak.
Demo yang dimainkan pengunjung tanpa mendaftar membuat seed-nya dan menghitung hasil di browser Anda sendiri, dengan engine dan tabel yang sama seperti game sungguhan. Ini adalah latihan dengan poin gratis: tanpa akun uang dan tanpa jackpot.
Pertanyaan yang sering diajukan
Apa itu Provably Fair?
Cara bagi pemain untuk memeriksa bahwa setiap hasil ditentukan oleh nilai yang dikunci sebelum bermain: situs menunjukkan komitmen atas rahasianya lebih dulu, lalu membuka rahasia itu kemudian sehingga hasilnya dapat dihitung ulang.
Apakah saya perlu menulis kode untuk memverifikasi?
Tidak. Tekan "Verify" di halaman game dan browser Anda yang bekerja. Jika ingin memeriksa sendiri, gunakan langkah dan contoh kode di halaman ini.
Mengapa saya harus merotasi seed sebelum memverifikasi?
Server seed adalah rahasia. Jika dibuka saat masih dipakai, siapa pun dapat mengetahui hasil berikutnya lebih dulu, jadi seed dibuka hanya saat Anda berpindah ke pasangan baru.