在加密游艺中,Provably Fair(可验证公平)是一项基于密码学哈希函数的零信任检验机制。它彻底消除了传统黑盒服务器“根据玩家下注额动态杀大赔小”的可能,让每一局《Crash(爆点)》、Hash Dice、Limbo 与 Mines 的开奖结果都能通过公开数学公式逆向验算。
开局前哈希值已定,改动任意一位字符将导致哈希摘要完全剧变。
玩家可随时自定义客户端种子,平台无法单方面预知或操控最终随机值。
99% 返还率直接写入公开验算脚本,任何人均可在开源沙盒中逐局复现。
开奖逻辑封闭在中心化服务器,玩家无法事后复盘
哈希摘要前置公示 + 客户端种子联合加密
由于 Crash 是全服同屏多人游戏,系统采用 1,000 万个预生成 SHA-256 节点构成的逆向密码链,彻底杜绝中途篡改。
SHA-256 具备严格的单向不可逆性:已知输入 X 可以瞬间算出 SHA256(X) = Y,但已知 Y 在算力上绝对无法反推 X。BC.Game 利用这一特性,在链条创建时从第 1 局正向加密到第 1,000 万局,而在实际开奖时则从第 1,000 万局往第 1 局倒序开奖:
SHA256(Hash_N-1) == Hash_N
SHA256(Hash_N-2) == Hash_N-1
Hash_N-2,那么对这个伪造的哈希做一次 SHA-256 运算,绝对不可能等于几秒前已经全网公示的第 2 局 Hash_N-1!这就从数学底层锁死了全部 1,000 万局的先后顺序与数值。
单局哈希还需结合全网公开的区块盐值(Salt,源自比特币特定高度区块哈希)进行 HMAC-SHA256 运算,截取前 52 bit(即 13 位十六进制字符)转换为最终爆点:
function crashPointFromHash(gameHash, salt) {
// 1. 使用公开Salt对本局Hash执行HMAC-SHA256
const hmac = crypto.createHmac('sha256', gameHash);
hmac.update(salt);
const hex = hmac.digest('hex');
// 2. 截取前13位十六进制 (52-bit 精度)
const subHex = hex.substring(0, 13);
const r = parseInt(subHex, 16);
const max52Bit = Math.pow(2, 52); // 4503599627370496
// 3. 注入 99% RTP (1% 庄家优势)
const X = r / max52Bit;
const rawMultiplier = 99 / (1 - X);
// 4. 向下取整保留两位小数,最低爆点为 1.00x
return Math.max(1.00, Math.floor(rawMultiplier) / 100);
}
2^52)
4,503,599,627,370,496
X < 0.01)
固定 1.00% (庄家优势)
适用于 Hash Dice、Limbo、Plinko 与 Mines(扫雷)等单人独立回合制原创游艺。
由 BC.Game 服务器生成的 64 位高熵随机字符串。在您正在使用该种子时,明文处于隐藏状态,但系统会提前向您展示它的 SHA-256 加密摘要(Server Seed Hash)。
完全由玩家浏览器生成或手动输入的随机字符串(支持任意字母、数字或幸运短语)。由于平台无法预知您会输入什么客户端种子,因此无法提前布置有利庄家的牌局。
代表当前种子对(Server + Client Seed)下的局数计数器。从 0 开始,每下注一局自动 +1。确保在同一组种子下,每一局生成的 HMAC 哈希结果都截然不同。
合成公式:HMAC_SHA256(Server_Seed, `${Client_Seed}:${Nonce}`)
| 原创玩法 | 哈希合成参数 | 字节截取方式 | 开奖结果数学转换公式 |
|---|---|---|---|
| Crash (爆点) | HMAC_SHA256(GameHash, BlockSalt) | 前 13 位 Hex (52 bits) | max(1.00, floor(99 / (1 - r / 2^52)) / 100) |
| Limbo (星际跃迁) | HMAC_SHA256(ServerSeed, ClientSeed:Nonce) | 前 13 位 Hex (52 bits) | max(1.00, floor(99 / (1 - r / 2^52)) / 100) |
| Hash Dice (哈希骰子) | HMAC_SHA256(ServerSeed, ClientSeed:Nonce) | 前 8 位 Hex (4 Bytes) | floor((int32 / 2^32) * 100000) → 00000 ~ 99999 |
| Mines (25格扫雷) | HMAC_SHA256(ServerSeed, ClientSeed:Nonce:Cursor) | 每 4 Bytes 驱动一次洗牌 | Fisher-Yates 洗牌算法对 0~24 格地雷坐标排序 |
| Plinko (掉落弹珠) | HMAC_SHA256(ServerSeed, ClientSeed:Nonce) | 8~16 组 4 Bytes 浮点数 | 每层判断 float < 0.5 向左(0)或向右(1)偏转 |
按照以下 4 个标准动作提取对局凭证,并在下方验算面板中实时核对十六进制字节向开奖倍率的转换过程。
在游戏界面下方点击“我的投注(My Bets)”或“全服记录”,点开任意一局需要核验的注单弹窗,复制顶部显示的 Bet ID 与当局哈希摘要。
若是 Limbo、Hash Dice 或扫雷,点击弹窗右上角的盾牌图标进入“Seed Settings”,点击 Rotate Seed Pair(更换种子)。系统将立刻公开旧种子的明文。
将揭晓的 Server Seed 明文 进行一次标准 SHA-256 哈希,检查所得结果是否与您开局前看到的 Server Seed Hash 完全一致。
将 Server Seed、Client Seed 与当局 Nonce 填入下方实时验算沙盒(或第三方开源脚本),比对计算出的爆点或骰子点数是否与实际派彩分毫不差。
前 13 位关键截取字节:
除了使用本页沙盒与内置校验器,玩家还可以将代码复制到完全离线的本地浏览器控制台或开源沙盒中进行交叉比对。
如果您对任何网页工具都不放心,可以直接在任意空白浏览器标签页按下 F12 打开开发者控制台(Console),粘贴以下原生 JavaScript 代码,利用浏览器底层内置的 crypto.subtle 离线验算:
async function verifyBCGameCrash(gameHash, blockSalt) {
const enc = new TextEncoder();
const key = await crypto.subtle.importKey(
'raw', enc.encode(gameHash),
{ name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
);
const sig = await crypto.subtle.sign('HMAC', key, enc.encode(blockSalt));
const hex = Array.from(new Uint8Array(sig))
.map(b => b.toString(16).padStart(2, '0')).join('');
const r = parseInt(hex.slice(0, 13), 16);
const crash = Math.max(1, Math.floor(99 / (1 - r / Math.pow(2, 52))) / 100);
console.log({ hmacHex: hex, verifiedMultiplier: crash + 'x' });
}
// 调用示例:传入本局Hash与公开Salt即可在控制台打印精确爆点
直接调用操作系统内核级 SHA-256 指令集,不向任何服务器发送请求。
算法与主流开源 Provably Fair 校验仓库 100% 字节级兼容。
许多新手直接把未轮换前的 Server Seed (Hashed) 填入验算器导致结果不符。请务必先点击轮换(Rotate),用揭晓后的明文种子进行验算。
既然每一局哈希早已锁定,说明连红或连绿是纯粹的密码学随机分布波动,不存在“系统看你倍投故意连杀10局”。
在进行大额自动脚本挂机前,先复制保存当前的 Server Seed Hash,挂机结束后轮换种子并校验前后哈希指纹一致。
确认开奖结果具备 99% RTP 与不可篡改性后,胜负关键便完全取决于“爆点分布统计”与“仓位止损纪律”。