中本聪放弃的扑克实验带着比特币的元素回归

早在2008年,当中本聪准备发布比特币白皮书时,这位神秘的发明家似乎还抽出时间在比特币的代码库中设计了一个扑克室。在比特币最早的源代码中隐藏着发牌、弃牌、跟注和加注的按钮。但问题是,这些按钮实际上并不能玩扑克。
这款软件具备了游戏桌的雏形,但底层却没有可运行的游戏。18年后,斯坦福大学研究员罗宾·莱纳斯(Robin Linus)着手解决中本聪留下的难题。周四,莱纳斯推出了比特币扑克(Bitcoin Poker),这是一种允许两名玩家使用比特币进行真正的德州扑克游戏的协议。比特币用于执行规则、结算赌注以及处理不配合的玩家。
“亲爱的中本聪,BitVM 的第一次争议、SHA2-ECDSA 多语言算法、Binohash 的疯狂——所有这些都不过是用比特币脚本写的粉丝来信。在我实现你最初的愿景之前,这一切都毫无意义,”Linus 在 X 上写道。“所以我终于完成了你在比特币 v0.1 中未完成的扑克客户端。来和我打几局吧。”
Satoshi 被遗忘的扑克室重获新生
比特币的原始源代码包含一个名为 uibase.cpp 的文件,其中包含扑克大厅和牌桌的图形组件。该界面的生成日期为 2008 年 4 月 16 日,大约比中本聪发布比特币白皮书早六个月。标有“发牌”、“弃牌”、“跟注”和“加注”的按钮表明,它的功能远不止一个简单的支付应用,尽管中本聪从未公开解释过他打算如何使用这些按钮。
比特币扑克网站。正在加载钱包截图。
这些早期的片段并非一个功能完善的扑克客户端,更遑论基于区块链的赌博系统。它们没有发牌机制、没有追踪赌注的机制,也没有决定谁该领取奖金的机制。Linus 在他的比特币扑克白皮书中明确指出了这一点,他写道:“这些界面片段并非完整的扑克协议。” Linus 并没有试图复活中本聪弃置的软件,而是着手从零开始构建缺失的机制。历史背景让这一发现更具趣味性。2006年10月,美国国会通过了《非法互联网赌博执法法案》,旨在打击与非法互联网赌博相关的金融交易。几年后,在2011年4月被称为“黑色星期五”的打击行动中,联邦当局查封了多家大型在线扑克运营商的域名。在线赌博限制是否影响了中本聪的思考尚不得而知,但无需依赖中心化支付处理商即可玩扑克的想法,无疑符合比特币的最初目的。
九张牌,两名玩家,没有庄家发牌
斯坦福大学博士候选人林纳斯·阿姆斯特朗 (Linus Amsterdam) 最为人熟知的成就是开发了 BitVM,这是一个于 2023 年提出的方案,旨在无需更改比特币的共识规则即可验证复杂的计算。他后来的研究成果包括 BitVM2、BitVM3、Zerosync 以及其他加密系统。比特币扑克 (Bitcoin Poker) 将这种创新方法应用于比区块链计算更为人熟知的领域。
Linus 的论文解释道:“我们描述了一种基于比特币的双人限注德州扑克协议。” 游戏涉及两名玩家,每人会收到两张底牌,同时随着下注的进行,还会发出五张公共牌。与传统的在线扑克不同,玩家收到的底牌并非由赌场服务器或荷官决定。
相反,双方参与者会提供秘密信息来生成牌。正如 Linus 所解释的,“只需要九张不同的牌。” 该系统并非洗整副 52 张牌,而是精确生成一局所需的九张牌,并使用加密承诺和零知识证明来确保发牌的公平性。
这种安排确保任何一方都无法暗中操控结果。论文指出,“任何一方都无法单独解密”,并描述了设置过程中使用的联合加密信息。游戏开始前,该协议还会检查是否存在重复的牌,但不会泄露牌的身份。如果发现两张牌相同,则本次尝试作废,并重新开始发牌。
这里有个奇特的数学问题。随机生成的九张牌只有大约48%的概率能通过重复牌测试。这意味着系统平均需要尝试2.08次才能生成一手合格的牌。这种洗牌方式成本较高,但其结果是可以进行私密发牌,无需信任坐在对面的人。
当有人拒绝参与竞争时,比特币就成了裁判。
发牌是一回事,确保赢家拿到奖金则是另一回事,尤其是在双方都互不信任的情况下。Linus 通过在下注前准备一系列代表游戏所有可能结果的比特币交易来解决这个问题。
白皮书解释说:“规则定义了一棵有限的树状图。” 每个分支代表一种允许的操作,包括弃牌、过牌、跟注、加注、亮牌或结算底池。玩家预先授权这些操作,而比特币现有的交易规则可以防止玩家进行未经授权的即兴操作。
Linus写道:“无效操作没有预先授权的交易。”该协议还使用适配器签名,允许在特定交易签名时恢复所需的卡片信息。这可以防止玩家利用某些披露要求来获取不公平的优势。
但如果有人决定退出游戏,会发生什么呢?Linus 也给出了答案。“每个等待玩家的状态都会提供一个对手超时时间,”论文中写道。经过一段指定的延迟后,剩余的玩家可以领取已投入的筹码,而退出玩家的剩余筹码则会被返还。
研究人员指出一个重要的区别:“该协议可以强制结算,但不能强制任何人亮出底牌。”换句话说,比特币不能强迫任何人完成游戏,但它可以强制执行中途退出游戏的经济后果。
一款拥有56132个节点的扑克游戏暗藏玄机
这个设计很巧妙,但千万别把它误认为是一款轻量级的移动扑克应用。Linus 的参考配置,每位玩家 100 个大盲注,每轮下注四次,包含 56,132 个逻辑节点,以及 54,855 个普通签名和 1,306 个牌面显示包。每个显示包还包含 52 个适配器签名。
完整的准备快照大小为 8,416,186 字节,约 8.4 MB。在三次桌面浏览器测试中,准备和保存事务树耗时 26.39 到 27.26 秒。Linus 提醒道:“这些是测试数据,并非启动速度的保证。” 这些数据描述的是参考实现,而非用户对最终产品性能的预期。
幸运的是,普通的游戏玩法并不需要广播如此庞大的交易记录。“我们预期的游戏模式是链下进行的,”论文解释道。玩家私下交换信息,并将比特币交易作为备用,以防合作破裂。区块链实际上扮演着场边裁判的角色,随时准备在必要时解决纠纷。
近十八年后,中本聪的扑克理念有了真正的规则。
目前仍存在一些局限性。比特币扑克仅支持两名玩家,因为其他玩家可能会秘密分享各自的牌面信息。公开摊牌可能会暴露双方的牌,而且在将其投入生产使用之前,其加密结构仍需进行独立的安全性分析。
Linus并未试图掩盖这些缺陷。“这并非对恶意方协议的完整形式化证明,”论文承认道。现有的使用Bitcoin Core的测试涵盖了包括支付和超时路径在内的重要组件,但“测试覆盖率并不等同于安全性证明”。
然而,这项成就的意义远不止于扑克。Linus 已经证明,比特币现有的脚本编写和签名功能可以在不改变网络底层规则的前提下,实现包含隐藏信息、复杂决策和金钱回报的游戏。
比特币的神秘发明者留下了一张扑克桌,桌上的按钮功能有限。十八年后,Linus 开发出了发牌、玩牌和结算底池所需的加密规则。现在的问题是,这套复杂的系统能否变得足够实用,让普通玩家也能参与其中。