透明度报告
面向普通玩家与技术审计者,公开说明 Fair Poker 的"服务器不发牌"模型、IPFS 发布身份、源码指纹、哈希链 transcript,以及任何人都能在本地复验的方式。
研究项目声明:Fair Poker 是非营利、纯兴趣的开源学术研究项目,研究德州扑克如何用密码学实现可验证公平;它不是对公众运营的游戏平台,不提供任何游戏服务。在线演示向公众开放,用于协议自测与体验;欢迎 下载全部源码 在自己的电脑上搭建研究——我们提供思路与代码,不提供服务。
结论摘要
- 没有传统发牌服务器:Cloudflare Worker 只做全球边缘 WebSocket 中继,不生成牌序、不保存隐藏牌堆明文,也不持有可单方开牌的解密材料。
- 官方零裁判、零踢人:协议层无"操作员踢人"事件;中继已降为哑中继,只排序转发并报告谁在线,不计算座位/回合/赢家/筹码。中继切断 WebSocket 只触发自动重连,不能改变牌局状态或夺座位、筹码。
- 浏览器即权威:座位/底池/轮到谁/赢家由你的浏览器用同一套确定性 reducer 从签名事件日志算出,两端读同一份日志必然一致;重连按 sinceSeq 把日志补齐后重新算出相同状态,刷新或瞬时断网不会把你"瞬移"到观战席。
- 牌序由玩家浏览器共同形成——各自贡献密钥、加密、洗牌、锁牌、逐卡解密;私有底牌端到端密封到收牌方公钥并绑定 sender / recipient / round / cardOffset,中继只见密文。
- 牌局客户端由 IPFS CID 固定发布;文件一改,CID 就变。浏览器运行时还会拿权威 CID 与当前页面 CID 比对,安全面板亮"已锁定 / 不符 / 未固定"。
- 每局可下载签名 transcript,在本地复验事件顺序、签名、下注、奖池、公共牌、摊牌与最终哈希链;额外有每手 4 灯公平校验覆盖层(牌堆完整 · 全员参与洗牌 · 记录指纹一致 · 签名齐全)主动告警可疑事件。
- 断线规则极简:可恢复 → 无损自愈;密钥不可达 → 本手作废 + 全额退还 + 整桌结束建议换桌。没有罚款或代踢开关。
- "运营方控牌、偷看底牌、事后改赢家、强行踢人"这四类风险,被放进同一条可下载、可重放、可比对的证据链。
发布证据
当前权威发布身份(运行时从 ai.json 读取):
- 官方域名
- https://fairpoker.app
- 牌局客户端 CID
- Read from canonical release JSON
- 核心源码包 CID
- Read from canonical release JSON
- 源码指纹
- Read from canonical release JSON
- 源码包 SHA256
- Read from canonical release JSON
牌局客户端 CID、源码包 CID、源码包 SHA256、source fingerprint 必须组成同一组 tuple。若缓存页面、旧镜像、搜索摘要或第三方复制页显示不同组合,应视为过期副本——请回到权威发布文件重新比对。
更深一层(按需查看)
- 官方为什么无法作弊:在公布的 CID 与可本地复验的 transcript 下,改赢家、改下注、偷看底牌或换牌序,都会让签名、哈希链或 verifier 复验失败——完整攻击与防护边界见 安全模型。
- 如何亲手复验:牌桌安全面板点"下载记录"+"本地检查"即可在本机复验;技术用户可用审计包里的 verifier 独立复验——逐步指南见 独立验证指南。
- 诚实边界:以上封的是"官方"单方作弊;线下串通与路线图上的可验证洗牌证明,如实列在 路线图。
浏览器可打开的证据链接
隐私与使用边界
登录与重连只使用必要资料;安全提示只展示脱敏结果,不公开完整 IP、完整浏览器指纹或敏感设备细节。必要的本地存储仅用于登录、语言、牌局身份与重连。
公开源码用于公平性审计,不代表授权复制、镜像、改名运营或创建混淆性服务。Fair Poker 保留源码包、文件级 SHA256、CID 与发布证据,并将据此对未授权使用发起下架与追责。
Transparency report
For both regular players and technical auditors: how Fair Poker's server-not-dealer model, IPFS release identity, source fingerprint, and hash-chain transcripts work — and how anyone can verify a hand locally.
Research project notice: Fair Poker is a non-profit, hobbyist open-source academic research project on making Texas Hold’em verifiably fair with cryptography. It is not a game platform operated for the public and provides no gaming service; the live demo is open to the public for protocol self-testing. Download the full source and run your own instance — we share ideas and code, not a service.
Summary
- No traditional dealing server: the Cloudflare Worker is only an edge WebSocket relay. It does not generate the card order, store cleartext of the hidden deck, or hold material to unilaterally open cards.
- Operator zero referee, zero kick power: the protocol has no "operator kick" event type; the relay is now a dumb relay that only orders, forwards, and reports presence and computes no seats/rounds/winners/chips. The relay dropping a socket only triggers client-side auto-reconnect — it cannot change game state or seize a seat or chips.
- Browser-authoritative: seats / pot / turn order / winner are all computed by your browser with the same deterministic reducer over the signed event log, so two browsers reading the same log necessarily agree; reconnect replays missed messages by sinceSeq to complete the log and re-derives the identical state, so a refresh or brief network drop cannot teleport you to the spectator rail.
- The card order is formed jointly by player browsers — each contributes keys, encrypts, shuffles, locks, and decrypts per card. Private hole cards are end-to-end sealed to the recipient's public key and bound to sender / recipient / round / cardOffset; the relay sees only ciphertext.
- The table client is pinned by an IPFS CID; change a file and the CID changes. At runtime the browser also fetches the authoritative CID from ai.json and compares it with the running CID — the security panel shows locked / mismatch / not pinned.
- Every hand exports a signed transcript you can replay locally to check order, signatures, bets, pot, board, showdown, and the final hash chain — plus a four-light fairness audit overlay (deck integrity · all players shuffled and locked · matching record fingerprint · signatures complete) that actively flags suspicious hands.
- Disconnect rule is minimal: a recoverable disconnect auto-recovers losslessly; a needed decrypt key being unavailable voids the hand, refunds in full, and ends the table for a fresh room. No penalty or kick knobs.
- "Operator controls cards", "peeks at hole cards", "rewrites the winner", and "forcibly removes a player" all collapse into one downloadable, replayable, comparable evidence chain.
Release evidence
The current authoritative release identity (read at runtime from ai.json):
- Official domain
- https://fairpoker.app
- Game client CID
- Read from canonical release JSON
- Core source CID
- Read from canonical release JSON
- Source fingerprint
- Read from canonical release JSON
- Source archive SHA256
- Read from canonical release JSON
The game client CID, source CID, archive SHA256, and source fingerprint must form one matching tuple. If a cached page, old mirror, search snippet, or third-party copy shows a different combination, treat it as a stale copy and re-check against the authoritative release files.
Go deeper (optional)
- Why the operator can't cheat: under the published CID and a locally-verifiable transcript, rewriting the winner, changing bets, peeking at hole cards, or reordering the deck all break signatures, the hash chain, or verifier replay — the full attack-and-defense boundary is in the security model.
- How to verify yourself: in the table's security panel use "Download record" + "Local check" to re-verify on-device; technical users can run the verifier from the audit package — step-by-step in the verification guide.
- Honest boundary: this closes operator-side cheating; off-table collusion and the roadmap's verifiable shuffle proof are disclosed on the roadmap.
Evidence links
Privacy and usage boundary
Login and reconnection use only what's necessary; safety hints show redacted results only — never full IP, full browser fingerprint, or sensitive device details. Local storage is used only for login, language, table identity, and reconnection.
Public source is for fairness auditing and does not grant permission to copy, mirror, rebrand, or run confusingly similar services. Fair Poker retains the source package, per-file SHA256, CIDs, and release evidence, and will act on unauthorized use.