← 返回博客

· · 更新

手牌验证指南

在牌桌点验证,由浏览器检查洗牌证明和解密证明并比对本设备记录,或下载验证包用命令行检查;了解各结果的含义和边界。

默认发牌的德州一手结束后,打开牌桌菜单的「公平性详情」并点验证。服务器会返回一份洗牌证明,证明发牌进程在发牌前锁定的牌组正好是一副标准 52 张牌,不缺、不多、不重复;还会为你有权看到的每张牌返回解密证明:公共牌、摊牌或主动亮出的牌,以及你自己的底牌(这部分只发给你)。你的浏览器在本地检查这些证明,并与本设备在牌局中留存的记录比对。完全通过(本机亲历)表示证明全部通过且与记录一致;服务器记录有效,本机未完整亲历表示证明通过,但本设备的记录缺失或不完整,例如换了设备、清除了浏览器存储、牌局中途掉线,或这手牌已不在最近 500 手内,它不等于发现作弊;证明不通过或与记录不一致时显示为失败。

想在自己电脑上检查,登录后在公平性验证页选中这手牌并下载验证包 JSON(只有本手参与发牌的玩家能拿到),然后在开源仓库根目录运行下面的命令;把路径换成 - 则从标准输入读取验证包。输出 OK 表示洗牌证明和每张已打开的牌都通过检查,随后列出承诺以及证明得出的公共牌和底牌;REJECTED 表示有检查未通过。服务器只负责提供证明:牌桌核验、验证页和命令行都在你自己的机器上检查。

cargo run -p mental-poker --bin pf_verify -- ~/Downloads/bluffking-hand-<id8>.json

通过也有边界:只有你有权看到的牌会被打开,对手没亮的弃牌和没发出的牌始终加密,无法从验证包或任何公开数据复算;「发发看」显示的牌不在验证范围内。玩家种子只有在至少一位诚实玩家提交、且没有座位承诺后扣留时,才能保证牌序随机;扣留种子的座位会在结果中列出。命令行只检查验证包本身,无法与你设备上的记录比对,最好对照你在发牌前看到的承诺。本次更新之前的手牌显示为无法验证的旧版本。独立发牌进程仍然知道它洗出的牌组,这些检查也不能证明线上运行的是哪一个程序版本。如果希望牌局中服务器也看不到底牌,见高级加密发牌。