ความโปร่งใสของ KAKALOT Originals: ตรวจผลทุกรอบได้เอง
เกม KAKALOT Originals ทุกเกมออกแบบให้ผู้เล่นตรวจได้ว่าผลของแต่ละรอบถูกกำหนดก่อนเล่นและไม่ถูกแก้ไขภายหลัง หน้านี้อธิบายหลักการและขั้นตอนตรวจ โดยไม่ต้องเชื่อคำพูดของเว็บ
แนวคิด: ล็อกก่อน เปิดทีหลัง
ก่อนคุณเริ่มเล่น ระบบสร้างค่าลับที่เรียกว่า server seed แล้วแสดงเฉพาะรหัสยืนยัน (SHA-256 ของ server seed) ให้คุณเห็นก่อน รหัสนี้เหมือนการปิดผนึกซองคำตอบ เว็บเปลี่ยนค่าลับภายหลังไม่ได้โดยที่รหัสไม่ตรง
ผลของแต่ละรอบคำนวณจาก server seed, client seed (ค่าฝั่งผู้เล่น) และเลขรอบ (nonce) ผ่านฟังก์ชัน HMAC-SHA256 เมื่อคุณกด "เปลี่ยนชุดสุ่ม" ระบบเปิดเผย server seed เดิม คุณจึงคำนวณผลทุกรอบที่เล่นด้วยชุดนั้นซ้ำเองได้
ขั้นตอนตรวจผลของรอบ
- ก่อนเล่น จดรหัสยืนยันของชุดสุ่มปัจจุบัน (server seed hash), client seed และเลขรอบ
- เล่นตามปกติ ทุกรอบมีรหัสตาและอยู่ในประวัติการเดิมพัน
- กด "เปลี่ยนชุดสุ่ม และเปิดเผยชุดเดิม" ระบบแสดง server seed ของชุดที่ผ่านมา
- ตรวจว่า SHA-256 ของ server seed ที่เปิดเผย เท่ากับรหัสยืนยันที่คุณเห็นก่อนเล่น ถ้าตรงกัน แปลว่าเว็บไม่ได้เปลี่ยนค่าหลังคุณเริ่มเล่น
- คำนวณ HMAC-SHA256 โดยใช้ server seed เป็นกุญแจ และข้อความตามรูปแบบของเกมนั้น (ตารางด้านล่าง) แล้วนำผลมาเทียบกับผลที่ได้ในรอบนั้น
- หรือกดปุ่ม "ตรวจ" ในหน้าเกม เบราว์เซอร์ของคุณจะคำนวณซ้ำทั้งหมดให้ โดยไม่ต้องเชื่อผลจากเซิร์ฟเวอร์
รูปแบบข้อความที่ใช้คำนวณในแต่ละเกม
ตัวอย่างใช้ client seed ว่า clientSeed และ nonce เท่ากับ 7 ค่าจริงของคุณแสดงในหน้าเกม การนับรอบในเกมที่ใช้หลายชุดเริ่มจาก 0
| เกม | ข้อความ (message) |
|---|---|
| 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 |
รอบที่ลุ้น Royal Jackpot ใช้ข้อความเพิ่มเติม ตัวอย่างของ HEADS OR TAILS คือ clientSeed:7:jackpot และ 6 ไบต์แรกของผลลัพธ์ใช้เป็นตัวเลขตัดสินแจ็กพอต
กุญแจของ HMAC คือไบต์ของ server seed (ฐาน 16, 64 ตัวอักษร) แต่ละเกมมีกติกาแปลงผลลัพธ์เป็นเหรียญ ไพ่ หรือกระดานต่างกัน ดูรายละเอียดในคู่มือของแต่ละเกม
ตัวอย่างโค้ดตรวจ HEADS OR TAILS
โค้ดด้านล่างรันได้ในคอนโซลของเบราว์เซอร์ ตรวจรหัสยืนยันและผลโยนเหรียญของหนึ่งรอบ (ใช้ข้อความ 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 };
}รหัสตาและห่วงโซ่แฮช
ทุกรอบมีรหัสตาเรียงต่อกันไม่ซ้ำ เช่น RI-0000001 สำหรับ ROYAL INGOTS เงินจริง และ DI- สำหรับเดโม แต่ละเกมมีตัวย่อของตัวเอง รหัสตาแสดงในหน้าเกมและประวัติการเดิมพัน
ฐานข้อมูลคำนวณห่วงโซ่แฮชของรอบต่อเนื่อง: แฮชของแต่ละรอบรวมแฮชของรอบก่อนหน้า รหัสตา รหัสยืนยันชุดสุ่ม client seed เลขรอบ และผลของรอบ ถ้ามีการแก้หรือแทรกรอบย้อนหลัง โซ่จะขาดและไม่ตรงกับรอบถัดไปทั้งหมด
ROYAL BACCARAT: ล็อกไพ่รายใบ
บาคาร่าใช้การล็อกไพ่ทั้งขอน เมื่อเปิดขอน ไพ่ 416 ใบ (8 สำรับ) ถูกสับและล็อกแต่ละใบด้วยรหัส SHA-512 ของข้อความ "ลำดับ:ไพ่:salt" เมื่อแจกใบใด ระบบเปิดเผย salt ของใบนั้นเพื่อให้ตรวจ ผู้เล่นจึงตรวจได้ว่าไพ่ที่แจกตรงกับที่ล็อกไว้ก่อนตาแรก เมื่อจบขอนระบบเปิดเผยชุดสุ่มของขอนเพื่อตรวจการสับไพ่ทั้งหมด ดูรายละเอียดใน คู่มือ ROYAL BACCARAT
ข้อจำกัดที่ควรรู้
การตรวจแบบนี้พิสูจน์ได้ว่าผลไม่ถูกแก้ไขหลังคุณเริ่มเล่น และคำนวณตามกติกาที่เปิดเผย แต่ไม่ได้ทำให้ผลของรอบถัดไปคาดเดาได้ และไม่ทำให้โอกาสชนะดีขึ้น ผลของทุกรอบยังเป็นการสุ่ม
โหมดเดโมที่ผู้เยี่ยมชมเล่นโดยไม่สมัคร สร้างชุดสุ่มและคำนวณผลในเบราว์เซอร์ของคุณเอง ใช้เอนจินและตารางเดียวกับเกมจริง แต่เป็นการฝึกด้วยแต้มฟรี ไม่มีบัญชีเงินและไม่มีแจ็กพอต
คำถามที่พบบ่อย
Provably Fair คืออะไร
คือวิธีให้ผู้เล่นตรวจได้ว่าผลของแต่ละรอบถูกกำหนดด้วยค่าที่ล็อกไว้ก่อนเล่น โดยเว็บแสดงรหัสยืนยันของค่าลับก่อน แล้วเปิดเผยค่าลับทีหลังเพื่อให้ตรวจซ้ำได้
ต้องเขียนโปรแกรมเองเพื่อตรวจไหม
ไม่จำเป็น กดปุ่ม "ตรวจ" ในหน้าเกม เบราว์เซอร์จะคำนวณให้ แต่ผู้ที่ต้องการตรวจเองสามารถใช้ขั้นตอนและตัวอย่างโค้ดในหน้านี้
ทำไมต้องเปลี่ยนชุดสุ่มก่อนตรวจ
server seed เป็นค่าลับ ถ้าเปิดเผยระหว่างที่ยังใช้อยู่ ผู้อื่นจะรู้ผลรอบต่อไปล่วงหน้า ระบบจึงเปิดเผยเมื่อคุณเปลี่ยนชุดเท่านั้น