抗共谋、可验证和可证明公平的令牌游戏的客户端-服务器系统及其采用的方法与流程

文档序号:19159177发布日期:2019-11-16 01:09阅读:150来源:国知局
抗共谋、可验证和可证明公平的令牌游戏的客户端-服务器系统及其采用的方法与流程

本发明总体上涉及在线游戏系统领域。更具体地,本发明涉及一种多玩家游戏系统。



背景技术:

在现有的基于令牌(token)的运气和技巧游戏中,例如拉米纸牌(rummy)、扑克(poker)、多米诺骨牌(dominoes)等,游戏令牌的随机分发,例如扑克牌的随机分发,已为世人熟知了许多世纪。在引入数字计算机游戏之前,随机分发游戏令牌的最常见方法包括在分发这些令牌之前对令牌进行物理洗牌的步骤。通常,当人们使用连接在网络上的数字计算机来托管和玩这些游戏时,由被称为服务器的中央主机来洗牌和分发游戏令牌。服务器可以使用从被称为随机数生成器(rng)的软件生成的随机数来这样做。这给玩家带来了信任问题,因为他们不能确定随机令牌洗牌和分发过程是否有意偏向某个玩家。另一个问题是秘密令牌(比如扑克牌中的底牌)的隐秘性。玩家不能确定他们的牌不为对手所知,因为服务器进行交易并且可能会泄露这些信息。另一个问题是共谋。在网络上不仅更难发现共谋,而且共谋各方可以更容易地分享信息。

鉴于以上讨论,需要一种具有抗共谋性、可验证性和可证明公平性的,在网络上玩令牌游戏的基于客户端-服务器的系统和方法。



技术实现要素:

以下给出了本文的简单概述,以为读者提供对本文的基本理解。本概述不是对本文的广泛概述,并且其未标识本发明的重要/关键元素或描绘本发明的范围。其唯一目的是以简化的形式给出本文公开的一些概念,作为稍后给出的更详细描述的序言。

在一示例性方面,本文提出了一种用于以抗共谋、可验证和可证明公平的方式玩基于令牌的在线游戏的基于客户端-服务器的系统。所述基于客户端-服务器的系统包括配置有客户端软件以使玩家能够访问、加入和玩在线纸牌游戏的多个客户端计算装置(下文中也称为客户端终端),以及基于游戏的服务器系统,该基于游戏的服务器系统包括中央游戏服务器和协议管理器,配置成连接玩家并提供各种子协议,用于在基于令牌的游戏中以可验证和可证明公平的方式在网络上执行各种关键步骤,如洗牌、分发私人令牌(如底牌)以及随后展示摊牌等。

根据一个示例性方面,本文指定了允许前述基于游戏的服务器系统在网络(例如互联网)上托管基于令牌的游戏的方法、协议和设备,并且以使得任何利益相关者(无论是服务器还是任何个人玩家)能够在进行前述关键步骤和整个游戏中为公平和诚信提供充分证据的方式进行该游戏。更具体地说,对于玩家来说,本文给出了在游戏中自我实施和自我验证诚信和公平性的规定,并且提供了高度的抗共谋能力。在很高的层次上,这是通过让所有相关的参与者参与所有关键步骤来实现的。每个关键步骤的输出直接取决于玩家给出的所有输入。结果,没有一个共谋方可以预先确定或预测这些结果,每个玩家都可以以自己的身份践行诚信和公平。这使得保证了即使服务器和每一个其他玩家共谋对抗一个玩家,那么该玩家也可以确信这些令牌是以随机且非预定的方式洗牌的,没有其他人知道发给他们的私人令牌,任何共谋方都不能改变游戏期间分发的任何令牌和/或随机抓取公共令牌,并且任何共谋方都不能预测或预先确定这些令牌,等等。

通过将前述子协议与微小修改相结合,可以以可验证和可证明公平的方式创建用于各种基于令牌的游戏的协议。这种基于令牌的游戏的示例可以包括扑克、多米诺骨牌(dominoes)、杜拉克卡牌(durak)、uno等,而不限制本文的范围。作为这方面的一个示例,稍后将介绍通过使用子协议来执行德州扑克和5张牌扑克游戏的完整协议。以可证明公平的方式托管和进行这两个游戏的方法包括以下步骤:基于游戏的服务器系统托管游戏并指定其公钥,玩家使用他们的客户端终端连接到游戏,客户端终端共享其公钥,基于游戏的服务器系统向具有数字签名的玩家分配角色,客户端终端对先前的信息进行签名并发送回服务器,基于游戏的服务器系统指示玩家提交其加密承诺以便以可验证的方式执行关键步骤,客户端终端提交承诺,服务器向所有客户端终端广播承诺,客户端终端展示他们的排列令牌且其他参与者验证相应的承诺,服务器和客户端终端确定最终洗好的牌,玩家确定他们的底牌并在需要时更换底牌(如在5张牌扑克(5cardsdrawpoker)中),进行一轮下注,如果需要,揭开公共牌(如在德州扑克中),在摊牌期间由客户端终端揭开底牌,以及由服务器和玩家计算赢家。

附图说明

通过结合附图阅读以下优选实施例的详细描述,本发明的其他目的和优点对于本领域技术人员将变得显而易见,其中相同的附图标记用于表示相同的元件,并且其中:

图1是描述根据本文的示例性实施例的用于抗共谋、可验证和可证明公平的基于令牌的游戏的基于客户端-服务器的系统的示图;

图2是描述根据本文的示例性实施例的基于游戏的服务器系统的模块的示图;

图3是描述根据本文的示例性实施例的基于游戏的服务器系统托管游戏并发布游戏信息的方法的流程图;

图4是描述根据本文的示例性实施例的玩家加入游戏和基于游戏的服务器系统初始化游戏的方法的流程图;

图5a-5d是流程图,描绘了根据本文的示例性实施例的为消息m创建按时间顺序排列的消息cm的方法;基于游戏的服务器系统向玩家发送消息m的方法;一种基于游戏的服务器系统请求并获得来自玩家的响应的方法,以及一种玩家向基于游戏的服务器系统发送消息m的方法;

图6是描述根据本文的示例性实施例的通过基于游戏的服务器系统处理从玩家的客户端终端接收的响应的方法的流程图;

图7是描述根据本文的示例性实施例的用于对具有d张牌的牌组(deck)进行洗牌以获得主牌组(masterdeck)md的子协议的流程图,该主牌组md以idc限定的初始牌组排列和r限定的玩家排序开始;

图8是描述根据本文的示例性实施例的用于使玩家从其具有d张牌的玩家牌组pd中选择h张底牌并提供摊牌的子协议的流程图;

图9是描述根据本文的示例性实施例的用于使玩家在具有p个玩家的游戏中以顺序r从具有d张牌的玩家牌组pd中选择h张底牌并提供换牌和随后的摊牌的子协议的流程图;

图10是描述根据本文的示例性实施例的用于在一轮公共牌开牌过程中从公共(公用)牌组cd中抓取c张公共牌,剩余m张牌的子协议的流程图;

图11是描述根据本文的示例性实施例的以可验证和可证明公平的方式进行一轮下注的子协议的流程图;

图12是描述根据本文的示例性实施例的用于以可验证和可证明公平的方式使用一副52张牌的标准牌组来进行德州扑克游戏的方法和协议的流程图;

图13是描述根据本文的示例性实施例的用于以可验证和可证明公平的方式使用一副52张牌的标准牌组进行具有p名玩家的5张牌扑克游戏的方法和协议的流程图;

图14是描述根据本文的示例性实施例的用于以可验证和可证明公平的方式将p个玩家随机分配到具有相同游戏设置的一组桌子上的p个座位以防止和最小化共谋可能性的方法和协议的流程图。

具体实施方式

应该理解,本文的应用不限于以下描述中阐述的或附图中示出的部件的构造和布置的细节。本文能够有其他实施例,并且能够以多种方式实践或执行。此外,应该理解,本文使用的措辞和术语是为了描述,不应该被认为是限制性的。

本文使用的“包括”、“包含”或“具有”及其变体意指涵盖其后列出的项目及其等同物以及附加项目。本文中的术语“一”和“一个”不表示数量限制,而是表示存在至少一个所引用项目。此外,术语“第一”、“第二”和“第三”等的使用在本文中不表示任何顺序、数量或重要性,而是用于将一个元件与另一个元件区分开来。

根据本文的非限制性示例性实施例,公开了一种用于在数字网络上进行具有抗共谋、可证明和可验证公平性的基于令牌的游戏的基于客户端-服务器的系统和方法。这通过描述用于在包括但不限于扑克游戏的计算机网络游戏的上下文中以可验证和可证明公平的方式执行典型游戏操作(例如对一组令牌进行洗牌、揭开令牌、发私人令牌或其任何组合)的子协议来实现。这些子协议及其修改可用于创建用于各种现有基于令牌的游戏(例如扑克、拉米纸牌游戏(rummy)、单人纸牌(solitaire)、uno、杜拉克卡牌(durak)、多米诺骨牌(dominoes)等),或者未来将发明的各种其他基于令牌的游戏的可验证和可证明公平版本的完整协议,而不限制本文的范围。应该理解,可以使用本文描述的子协议和方法来创建各种新的可验证和可证明公平的基于令牌的游戏。为了示范,稍后将描述用于可验证和可证明公平地进行扑克的两种流行变体(即德州扑克和德劳扑克)的协议。

应当理解,该实施例也可以在不需要服务器的情况下通过使用分散的区块链分类账(如在比特币中)或者通过使用智能合约(如在以太坊中)以分散的方式执行。类似地,在线博客服务提供的时间戳功能将来也可能由快速分散的区块链提供。此外,基于游戏的服务器系统的角色可以由驻留在区块链上的智能合约来执行。还应理解,本发明还可用于创建可验证和可证明公平的在线版本的游戏,这些游戏可以像单人在线游戏一样玩。

参考图1,图1是根据本文的示例性实施例的用于抗共谋、可验证和可证明公平的基于令牌的游戏的基于客户端-服务器的系统的框图100。本文在玩家使用的多个客户端计算装置104a-104n(以下也称为客户端终端)和通过网络106连接的基于游戏的服务器系统102中实现。网络106可以包括但不限于以太网、局域网(lan)或广域网(wan),例如因特网,或网络的组合。

基于客户端-服务器的系统100包括多个客户端计算装置(下文中也称为客户端终端),如104a-104n,其配置有客户端软件以玩基于令牌的在线游戏,以及基于游戏的服务器系统102,其包括中央游戏服务器(下文在图2中描述),该中央游戏服务器配置成连接玩家和协议管理器(下文在图2中描述),以提供用于在基于令牌的游戏(例如,对一组令牌(例如,一牌组)进行洗牌、揭开公共令牌、发私人令牌)中通过网络以可验证和可证明公平的方式执行各种关键步骤的各种子协议。类似地,客户端终端配置成验证游戏的公平性和诚实性,并且在发生任何意外事件的情况下向玩家发出警报,例如,由客户端终端104a-104n计算的牌组洗牌子协议的最终主牌组(稍后描述)与基于游戏的服务器系统102计算和提供的牌组洗牌子协议不匹配。

客户端计算装置104a-104n可以是任何处理器驱动的装置,诸如个人计算机、膝上型计算机、手持计算机等,其由玩家用于访问、加入或玩在线游戏,并用于在玩家拥有的在线博客(以下称为玩家博客)上发布消息。除了具有处理器之外,客户端计算装置104a-104n还可以包括存储器、输入/输出(“i/o”)接口和网络接口等,而不限制本文的范围。此外,客户端计算装置104a-104n可以包括操作系统,该操作系统为但不限于微软苹果osxtm、unix或大型机操作系统,而不限制本文的范围。客户端计算装置还可以包括用于以可验证和可证明公平的方式执行游戏的原语,例如使用公钥加密的数字签名方案、加密散列和承诺方案,如稍后所讨论。

客户端计算装置104a-104n可以集成因特网浏览器或其他软件,包括专用程序或移动软件,用于与基于游戏的服务器系统102交互。如本文所述,玩家可以利用客户端计算装置104a-104n中的一个来使用客户端软件或经由网站与基于游戏的服务器系统102交互,以访问或玩一个或多个基于令牌的示例游戏。多个客户端计算装置104a-104n还可用于从基于游戏的服务器系统102检索或接收数据、消息或响应。应当理解,在下文中,玩家执行的所有行动都是使用他们各自的客户端终端104a-104n来执行的。

参考图2,图2是描述根据本文的示例性实施例的基于游戏的服务器系统102的模块的框图200。基于游戏的服务器系统102可以包括中央游戏服务器202和协议管理器204。中央游戏服务器202配置成托管游戏并且例如通过使用用户名和密码机制接受来自使用客户端计算装置104a-104n的玩家的认证连接,并在中央游戏服务器拥有的在线博客(以下也称为服务器博客)上发布消息。中央游戏服务器202还保存所有玩家简档、其游戏筹码余额等的账户。应该理解,只要适用,玩家会玩游戏来赢得更多游戏筹码。中央游戏服务器202配置成指定但不限于用于整体公平地进行游戏中所有关键步骤的协议、用于确定摊牌时的底池赢家的规则、以及在游戏的正常流程中断的情况下使用的后退程序,例如,由于使用客户端计算装置104a-104n(图1)的任何玩家的断开(退出)或未能及时通信。

协议管理器204包括用于以可验证和可证明公平的方式进行游戏的原语。原语可以是使用公钥加密、加密散列和承诺方案的数字签名方案。数字签名允许一方对消息进行数字签名,以便接收方能够确定消息的来源,同时对签名方实施不可反驳性。其通过一对数字密钥工作,如公钥和私钥。私钥由签名方保密,用于对消息进行签名。公钥被广播给接收方,接收方可以在接收时验证签名消息的来源。

加密散列是接受任何大小的输入并输出不可恢复的固定长度字符串的函数。也就是说,给定一个输出,找一个在应用加密散列(例如sha-256)时会导致该输出的对应输入是不可行的。

承诺方案可以允许一方对某一价值做出承诺,并在稍后的时间点以可验证的方式公开。该原语用于确保承诺的发布者在公开时不会改变承诺值。简单的承诺方案可能涉及发布承诺值的加密散列。为了验证,人们只需要计算公开值的加密散列,并将其与承诺发布者早先发布的散列值进行核对。如果该值所来自的空间非常小,例如掷硬币的结果,则可以用随机比特填充该值,以避免通过对输入空间的强力搜索从其加密散列中发现该值。

此外,中央游戏服务器202配置成在开始游戏之前向玩家分配角色(例如大盲注、小盲注等),收集担保品以阻止恶意破坏游戏或重复违反协议,定义用于计算摊牌时玩家牌的价值的规则,以及基于玩家的座位安排定义玩家的顺序等。如稍后所示,将在洗牌期间使用该顺序。此外,角色分配将由玩家使用他们各自的客户端计算装置104a-104n(图1)和基于游戏的服务器系统102进行数字签名,以建立参与游戏的证明。

参考图3,图3是描述根据本文的示例性实施例的基于游戏的服务器系统102托管游戏和发布游戏信息的方法的流程图300。在步骤306,中央游戏服务器202能够通过请求协议管理器204产生新的数字密钥对来初始化游戏。在步骤308,协议管理器204产生新的数字密钥对,并在步骤310将公钥发送到中央游戏服务器202。在步骤312,中央游戏服务器202然后继续编译游戏设置信息(以下也称为gsi),该游戏设置信息可以包括但不限于游戏类型及其规则的规范、适用于重复令牌数值的情况的特殊规则(稍后讨论)、中央游戏服务器202在认为玩家通信断开(退出)之前需要等待玩家通信的最长时间、座位数量、进入游戏的买入限制、下注限制、为了阻止不诚实的游戏或中断而要从每个玩家那里收集的担保品、游戏的公钥和游戏的服务器博客地址。进一步地,在步骤314,协议管理器204对gsi进行签名,最后在步骤316,中央游戏服务器202向玩家客户端终端广播gsi及其签名,并将它们发布到服务器博客。

参考图4,图4是描述根据本文的示例性实施例的玩家加入游戏和基于游戏的服务器系统102初始化游戏的方法的流程图400,其中在步骤406,玩家104a-104n使用客户端终端104a-104n建立到基于游戏的服务器系统102的认证连接,例如通过用户名/密码组合,并且在步骤408接收游戏的签名gsi。玩家104a-104n还可以在基于游戏的服务器系统102的服务器博客中查看gsi。为了加入游戏,在步骤410,玩家104a-104n从使用其客户端终端104a-104n产生新的数字密钥对开始,并且在步骤412对gsi进行签名并发布到其玩家博客以显示对其玩家博客地址的所有权证明。接下来,在步骤414,客户端终端104a-104n通过通知其公钥和玩家博客地址向基于游戏的服务器系统102发送加入游戏的请求。当接收到玩家加入游戏的认证请求时,在步骤416,基于游戏的服务器系统102可以查看玩家的账户、余额和玩家博客,并做出在座位上接纳玩家的决定。看到玩家的博客上发布签名的gsi有助于基于游戏的服务器系统102建立关于相关玩家对玩家博客的所有权和公钥的认证。

作为步骤418的第一种情况,一旦有足够的玩家104a-104n坐下来玩游戏,则基于游戏的服务器系统102在步骤422定义牌组的初始配置,称为初始牌组配置,否则在步骤418的第二种情况下,在步骤420等待。初始牌组配置可以是存储游戏中使用的令牌的数值表示的排列的阵列。例如,52张牌的标准牌组的初始牌组配置可以是阵列[‘as’、‘2s’、‘3s’,...,‘s’,‘ad’,...,‘kd’,‘ah’,...,‘kh’,‘ac’,...,‘kc’]其中‘as’代表黑桃a,依此类推。进一步地,在步骤424,对玩家104a-104n的列表及其公钥进行编译并定义玩家104a-104n的顺序(r),随后在步骤426,根据他们在游戏桌上的座位安排收集担保品并为玩家分配角色,如发牌人、小盲注、大盲注等。然后,在步骤428,基于游戏的服务器系统102将所有上述信息编译为游戏初始化信息,并对其签名,并将签名发送给所有玩家104a-104n,并且在步骤430,还将其发布在服务器博客上。在步骤432,玩家104a-104n签署上述签名,并将其发送回基于游戏的服务器系统102,服务器系统102进而在步骤434将来自所有玩家104a-104n的所有签名编译为游戏初始化合约(以下也称为gic),并在步骤436将该信息广播给所有客户端终端104a-104n。结果,所有各方(玩家104a-104n和基于游戏的服务器系统102)都有游戏初始设置的证明,并且所有玩家104a-104n都有参与游戏的证明。

参考图1和图2,稍后描述的协议和子协议需要将消息从基于游戏的服务器系统102传送到客户端终端,反之亦然。所采用的一些基本原则是:当基于游戏的服务器系统102需要向玩家传递消息时,其使用协议管理器204对消息进行签名,并将消息直接发送给玩家的客户端终端104a-104n,同时还将消息发布在服务器博客上。类似地,每当需要从玩家一方进行通信时,例如,在一轮下注期间提交或公开承诺或让玩家知道玩家的行动,基于游戏的服务器系统102直接联系玩家,并将此要求放在服务器博客上。如果网络有任何问题,或者任何玩家有任何不良意图,则可能不会收到消息,导致游戏中断。以下描述了在游戏期间在玩家的客户端终端104a-104n和基于游戏的服务器系统102之间以容错、不可反驳、可靠、明确和可验证的方式传送消息的机制,以及在玩家未能及时通信的情况下的后退过程。就此而言,接下来定义对应于消息的按时间顺序排列的消息。

参考图5a-5d,图5a-5d分别是别描述根据本文的示例性实施例的消息m创建按时间顺序排列的消息cm的方法;基于游戏的服务器系统102向玩家发送消息m的方法;基于游戏的服务器系统102请求并获得来自玩家的响应的方法,以及玩家向基于游戏的服务器系统102发送消息m的方法的流程图500a、500b、500c和500d,其中l为计算的在游戏期间从gic开始发生的所有通信的时间表,或者,实际上,l可以是在步骤502a计算的在游戏中产生的最后的按时间顺序排列的消息。与消息m相对应的按时间顺序排列的消息cm是通过首先将m附加到l的散列,如在步骤504a中,以获得h,然后在步骤506a中使用数字密钥对对h进行数字签名来计算的。发送对应的按时间顺序排列的消息cm而非原始消息m的目的是为了防止重放攻击,也是为了建立不可反驳性。由于按时间顺序排列的消息带有数字签名,所以实体发布按时间顺序排列的消息也证明了他们同意从gic发布开始游戏的当前状态。这消除了模糊性,并使得任何玩家104a-104n或基于游戏的服务器系统102容易验证游戏是否诚信地进行。需要注意的是,除非另有说明,否则从gic发布开始,在博客上发送或发布文本其余部分提到的所有协议和子协议的消息将仅通过按时间顺序排列消息的方式完成。

请注意,在文本中描述的子协议和协议期间进行的消息传输具有公共性质,因为任何人发现这些消息都不会损害游戏的诚信。因此,由实体(玩家104a-104n或基于游戏的服务器系统102)发出的每条消息也立即发布在他们各自的博客上(玩家博客或服务器博客,视情况而定),用于建立备用通信线路并进行时间标记。类似地,每当实体未接收到预期的通信时(由于网络中的一些问题或其他原因);其检查发件人的博客以检索通信。接下来将详细描述通信的具体情况。

参考流程图500b,当基于游戏的服务器系统102需要向玩家104a-104n发送消息m时,则其在步骤502b准备相应的按时间顺序排列的消息cm,并在步骤504b将其发送给玩家104a-104n,并且在步骤506b立即将其发布在服务器博客上。这种消息的示例可以是基于游戏的服务器系统102在牌组洗牌子协议期间向所有玩家104a-104n发送计算出的主牌组,下文中将对此进行描述。

参考流程图500c,当基于游戏的服务器系统102需要从玩家104a-104n获得响应以进行游戏时,则在步骤502c直接呈现请求,并且在步骤504c还将该请求立即发布在服务器博客上。这种场景的一个示例可以是基于游戏的服务器系统102请求所有玩家104a-104n在牌组洗牌子协议期间提交他们对牌组排列的加密承诺,下文中将对此进行描述。进一步地,在步骤506c,基于游戏的服务器系统102检查是否已经接收到响应,然后,如图6中稍后所描述,在步骤508c,基于游戏的服务器系统102处理该响应,并且该过程停止。如果没有接收到响应,则在步骤510c,基于游戏的服务器系统102等待一段时间,并检查玩家各自的博客。如果在步骤512c,如玩家博客上的消息上的时间戳所确定,并且根据gsi中规定的等待时间规则,在指定的时间内没有找到响应,则基于游戏的服务器系统102宣布玩家104a-104n断开连接(退出)。然后在步骤514c,基于游戏的服务器系统102可以基于游戏中断的严重程度对违约玩家104a-104n进行惩罚。例如,对玩家104a-104n在一轮下注期间断开连接(退出)的惩罚可能是放弃底牌,并从所有底池中移除他们的下注。如果在等待时间内发现响应,则在步骤516c处理该消息,如稍后在图6中所述。

参考流程图500d,每当使用客户端终端104a-104n的玩家104a-104n需要向基于游戏的服务器系统102传送消息m时,其在步骤502d准备与消息m相对应的按时间顺序排列的消息cm,并在504d将其发送到基于游戏的服务器系统102,并且在步骤506d还立即将cm发布在玩家博客上。这种通信的示例可以是玩家104a-104n在稍后描述的牌组洗牌子协议期间发送他们对牌组排列的承诺。进一步地,在步骤508d,玩家104a-104n检查是否接收到签名确认,并且在玩家确认的情况下,该过程在510d结束。否则,在步骤512d,在等待一段时间后,检查服务器博客是否有签名确认。

参考图6,图6是描述根据本文的示例性实施例的处理由基于游戏的服务器系统102从玩家的客户端终端104a-104n接收的响应的方法的流程图600,该方法从步骤602开始,在步骤602中,针对玩家104a-104n的公钥询问签名的有效性。在重复违规的情况下,如步骤616所示,基于对游戏造成的中断的严重程度,在步骤618执行处罚,而在没有重复违规的情况下,在步骤620,向玩家104a-104n提出重新发送消息的请求以及不接受消息的原因的解释。进一步地,在步骤604,检查响应是否为有效的按时间顺序排列的消息。如果是,则在步骤606,从按时间顺序排列的消息中提取相应的消息,并且在步骤608,询问该消息在当前游戏上下文中的有效性。如果是,则更新游戏状态,并在步骤610向玩家104a-104n发送签名确认,如果否,则如前所述,该过程在步骤616重新开始。进一步地,在步骤612,将响应广播给所有客户端终端104a-104n,最后在步骤614a,对响应签名并发布在服务器博客上。

如前所述,基于在线令牌的游戏需要执行一组关键的游戏操作。例如,德州扑克游戏需要支持洗牌、面朝下发(底)牌、面朝上发(公共)牌、登记玩家行动,如下注、跟注、加注、弃牌等以及摊牌。另一方面,drawpoker游戏也需要支持允许玩家更换他们的底牌。在下文中,描述了用于执行这些关键游戏操作中的每一个操作的可验证和可证明公平的子协议。应该理解,可以类似地创建用于在其他基于令牌的游戏、未来新发明的游戏或桌面游戏中执行关键步骤的子协议。

实例1(考虑用于洗牌虚拟牌组的子协议的实例):该子协议的目的是产生洗牌牌组,称为主牌组,该主牌组从idc定义的初始牌组配置开始。该子协议以任何共谋方都无法预先确定或预测的方式洗牌。包括的步骤是:给定idc中大小为d(通常为52)的牌组,所有客户端终端-104n独立地产生前d个自然数的随机排列。客户端终端l04a-104n创建对其排列的加密承诺。客户端终端104a-104n向基于游戏的服务器系统102发送其承诺。当从所有玩家接收到对排列的承诺时,基于游戏的服务器系统102将其广播给所有玩家104a-104n。然后,玩家104a-104n向基于游戏的服务器系统102发送(公开)其各自的排列。基于游戏的服务器系统102检查所有公开的有效性。基于游戏的服务器系统102根据前述顺序r将所有排列逐一应用于idc,以获得主牌组。基于游戏的服务器系统102向所有客户端终端104a-104n广播主牌组以及玩家104a-104n所做排列的所有公开。所有玩家104a-104n类似地并且独立地从应用玩家104a-104n按照r定义的顺序提交的排列的idc计算主牌组,并且检查其是否与基于主牌组游戏的服务器系统102已经发送的相同。此外,每个玩家独立地复制主牌组作为用于抓取其底牌的玩家牌组,并且基于游戏的服务器系统102复制主牌组作为用于抓取公共牌的公共牌组。接下来将提供该方法的细节。应当理解,可以类似地创建对一组令牌进行洗牌的几种其他方式。

参照图7,图7是描述根据本文的示例性实施例的用于对包括d张牌的牌组进行洗牌以获得以idc定义的初始牌组布置和r定义的玩家顺序开始的主牌组md的子协议的流程图700。该过程开始于步骤702,每个玩家104a-104n独立地创建前d个自然数的随机排列p。在步骤704,创建对p的加密承诺。进一步地,在步骤706,客户端终端向基于游戏的服务器系统102发送加密承诺。步骤708进行至基于游戏的服务器系统102,在步骤710询问来自所有玩家104a-104n是否接收到承诺。如果答案为否,则在步骤712有一个等待期,如果答案为是,则在步骤714,向所有玩家104a-104n广播接收到的所有承诺。进一步地,在步骤716,所有玩家104a-104n接收这些承诺。在步骤718,基于游戏的服务器系统102向所有玩家104a-104n提出公开其承诺的请求。进一步地,在步骤720,所有玩家104a-104n公开各自的承诺。在步骤722,基于游戏的服务器系统102检查承诺的有效性。在步骤724,询问是否已经从所有玩家104a-104n接收到公开。如果否,则在步骤726有一个等待周期,如果是,如在步骤728,根据前述的顺序r将所有公开的排列应用于idc以获得主牌组md。在步骤730,将md连同所有排列公开一起广播给所有玩家104a-104n,并且复制md以获得公共牌组。进一步地,在步骤732,所有玩家104a-104n验证这些公开。进一步地,在步骤734,由所有玩家104a-104n独立计算主牌组,并与基于游戏的服务器系统102提供的md进行比较,最后在步骤736,将md复制为玩家牌组。

实例2(考虑玩家从具有d张牌的玩家牌组中选择h张底牌并提供摊牌的子协议的实例):如下所述,用于以可验证和可证明公平的方式进行此操作的子协议仅在玩家摊牌时才公开玩家的底牌,从而防止在玩家在游戏期间选择弃牌的情况下暴露玩家的策略。包括的步骤是:挑选h张底牌,同时或在做出洗牌排列承诺之前(如实例1),玩家104a-104n中的每一个对h个分别小于或等于d的唯一自然数做出加密承诺,并将其发送到基于游戏的服务器系统102。一旦确定了主牌组md(如实例1中那样),每个玩家104a-104n独立地从md创建副本玩家牌组pd。每个玩家104a-104n将其底牌确定为如由他们先前承诺的h个唯一自然数所指定的pd中相应位置的牌。对于摊牌,未弃牌的玩家104a-104n简单地公开向基于游戏的服务器系统102承诺的h个唯一自然数列表。基于游戏的服务器系统102检查承诺的有效性,并使用md确定玩家的104a-104n底牌,并将整个信息广播给其余玩家104a-104n。其余玩家104a-104n也独立地检查承诺的公开和计算的底牌的有效性以进行验证。接下来将给出该方法的细节。应该理解,也可以类似地创建其他几种私下向玩家发令牌的方式。

参考图8,图8是描绘根据本文的示例性实施例的用于使玩家从其具有d张牌的玩家牌组pd中选择h张底牌并提供摊牌的子协议的流程图800。该过程开始于步骤802,其中每个玩家104a-104n独立地创建每一个均小于或等于d的h个唯一自然数的列表l。在步骤804,创建对l的加密承诺,并将其发送到基于游戏的服务器系统102。在步骤806,基于游戏的服务器系统102接收对底牌的承诺。在步骤808,询问是否从所有玩家104a-104n收到承诺。如果否,则在步骤810等待。如果是,则在步骤812向所有玩家104a-104n广播所有承诺。在步骤814,等待直到牌组洗牌子协议完成(如在实例1中),以确定主牌组md。在步骤816,玩家复制md以获得其玩家牌组pd。在步骤818,确定底牌为由l中的h个唯一数字指定的pd中各个位置的牌。步骤820进行到基于游戏的服务器系统102,在步骤820,基于游戏的服务器系统102一直等到摊牌,并且随后请求所有未弃牌的玩家104a-104n公开其底牌承诺。进一步地,在步骤822,玩家104a-104n等待摊牌,并且如果没有弃牌,则公开其各自在上面做出的承诺。在步骤824,基于游戏的服务器系统102检查公开的有效性,随后在步骤826,询问是否从所有未弃牌的玩家104a-104n接收到公开。如果否,则在步骤828等待,否则在步骤830为每个未弃牌的玩家104a-104n计算底牌。在步骤832,广播计算出的底牌,以及没有弃牌的玩家104a-104n的公开。在步骤834,所有玩家104a-104n验证所有公开。最后,在步骤836,为没有弃牌的玩家104a-104n计算底牌,并对先前分别在步骤830和832由基于游戏的服务器系统102计算和广播的底牌进行验证。

像梭哈扑克(studpoker)这样的游戏需要发一张面朝上的门牌和两张面朝下的底牌。很容易看出,玩家发放的门牌可以立即公开与门牌对应的承诺而不是等到摊牌。还应注意,由于每个玩家独立地从他们自己的从主牌组复制的玩家牌组中抓取底牌,本文潜在地允许基于游戏的服务器系统102托管可验证和可证明公平的基于在线令牌的游戏,其中无限数量的玩家彼此竞争。此外,玩家从他们自己复制的玩家牌组中抓取底牌也消除了共谋一方获得诚实(非共谋)玩家的底牌的任何统计信息的任何机会。例如,在德州扑克的常规游戏中,一个由4名玩家组成的共谋团队会知道任何其他玩家都不会拥有他们所持有的任何底牌。这一优势在如奥马哈扑克这样的游戏中非常重要,在这种游戏中,4名玩家总共可以拿到16张底牌。

实例3(考虑用于使玩家在具有p名玩家、提供换牌以及随后的摊牌的游戏中从具有d张牌的玩家牌组中选择h张底牌的子协议的实例):一些游戏,如drawpoker,需要向玩家发放5张牌。然后,玩家选择他想要保留的一组牌,剩下的牌被换成新牌。如下所述,用于以可验证和可证明公平的方式进行此操作的子协议确保没有玩家或任何共谋方能够预测或预先确定任何玩家的底牌或替换牌,并且仅当玩家摊牌时才公开玩家的底牌,从而防止在玩家在游戏期间选择弃牌的情况下暴露玩家的策略。包括的步骤是:每个玩家104a-104n在承诺洗牌排列时或之前(如实例1)承诺h个唯一自然数,每个自然数小于或等于d(通常为52)。每个玩家104a-104n还对h个随机数的p-1个列表做出承诺,其他玩家每人各一个列表。使用前述顺序r完成列表到玩家的映射。一旦使用牌组洗牌子协议确定了主牌组md(如在实例1中),每个玩家104a-104n独立地从md创建副本玩家牌组pd。每个玩家104a-104n将其底牌确定为如先前承诺的h个唯一自然数所指定的pd中各个位置的牌,并将其分开,给pd留下d-h张牌。在游戏过程中,然后每个玩家104a-104n可以指定他们想要替换的底牌的位置,并将该信息发送到基于游戏的服务器系统102,服务器系统102等待所有玩家104a-104n提交他们的换牌要求,然后将该信息广播给所有玩家。然后,每个玩家104a-104n公开他们对p-1个列表的承诺。每个玩家104a-104n确定并登记其他玩家104a-104n为自己创建的列表。已经提出要替换任何牌的每个玩家104a-104n使用为他创建的列表的第一元素以及h中的第一元素的总和(s)来计算第一张替换牌的位置,作为在他们的玩家牌组中第s%(d-h)+1位置的牌,给玩家牌组留下d-h-1张牌。如果需要,类似地使用列表中相应的(第二、第三、第四等)元素逐一地抓取其他(第二、第三、第四等)张替换牌,形成最终的一组底牌。对于摊牌,每个未弃牌的玩家104a-104n简单地公开其最初向基于游戏的服务器系统102承诺的h个唯一自然数的列表,然后基于游戏的服务器系统102将该信息广播给所有玩家104a-104n。由于已经公开了来自每个玩家的相应p-1个列表,所以基于游戏的服务器系统102和每个玩家104a-104n可以在为未弃牌的玩家104a-104n换牌之后计算和验证最终的底牌。接下来将提供该方法的细节。应该理解的是,有可能类似地创建其他几种私下向玩家发令牌同时允许换牌的方式。

参照图9,图9是描绘根据本文的示例性实施例的用于使玩家在具有p名以顺序r排序的玩家、提供换牌以及随后的摊牌的游戏中从具有d张牌的玩家牌组中选择h张底牌的子协议的流程图900。可以通过描述流程图进一步对此进行解释,其中该过程开始于步骤902,在步骤902中,每个玩家104a-104n提交对小于或等于d的h个唯一自然数列表的承诺。进一步地,在步骤904,提交对小于或等于d的h个唯一随机自然数的p-1个相似列表的承诺(玩家104a-104n中的其他玩家每人各一个列表)。在步骤906,基于游戏的服务器系统102接收来自所有玩家104a-104n的所有承诺。在步骤908,询问是否从所有玩家104a-104n接收到承诺,如果否,则在步骤910等待,如果是,则在步骤912将所有承诺广播给所有玩家104a-104n。所有玩家104a-104n均等待,直到在步骤914确定玩家牌组pd(如实例1)。进一步地,在步骤916,每个玩家104a-104n将其底牌确定为其各自的由先前承诺的h个唯一自然数指定的pd中相应位置的牌,并将其分开,给玩家牌组留下d-h张牌。进一步地,在步骤918,每个玩家104a-104n向基于游戏的服务器系统102传达需要替换的底牌的位置。这可以通过创建h个元素的阵列来实现,其中每个元素是0或1,这取决于是否需要更换该底牌。在步骤920,基于游戏的服务器系统102等待所有玩家104a-104n发送他们的换牌信息并对其签名,然后将其广播给所有玩家104a-104n。进一步地,在步骤922,玩家104a-104n中的每一个玩家向基于游戏的服务器系统102公开分别对p-1个列表的承诺。等待所有玩家104a-104n公开他们先前承诺的p-1个列表,此后,在步骤924,基于游戏的服务器系统102将该信息广播给所有玩家104a-104n。进一步地,在步骤926,所有玩家104a-104n将其他玩家104a-104n为自己创建的列表确定并登记为t。在步骤928,将t中的列表中的所有第一元素与l中的第一元素相加,以获得s,并且将第一张替换牌确定为玩家牌组中的第[s%(d-h)]+1张牌,给玩家牌组留下d-h-l张牌,并且如果需要,可以类似地确定进一步的替换牌。例如,将使用t中列表的第二元素和l中的第二元素来计算对应于第二张替换牌的s,并且该替换牌的位置将是玩家牌组中的第[s%(d-h-l)]+1张牌,因为只剩下(d-h-l)张牌。

基于游戏的服务器系统102等待摊牌,然后在步骤930,其请求所有未弃牌的玩家104a-104n公开他们的底牌承诺。玩家104a-104n进一步等待,直到摊牌,如果未弃牌,则他们在步骤932公开对底牌的承诺。在步骤934检查该公开的有效性。进一步地,在步骤936,询问是否接收到来自所有未弃牌玩家104a-104n的公开,如果没有,则在步骤938等待,如果是,则在步骤940为未弃牌的玩家104a-104n中的每一个玩家计算换牌后的最终底牌。进一步地,在步骤942,基于游戏的服务器系统102广播由所有玩家104a-104n计算出的底牌和公开。在步骤944,所有玩家104a-104n验证所有公开,最后,为未弃牌的玩家104a-104n计算底牌,并且在步骤946,对基于游戏的服务器系统102计算的底牌进行验证。

一些基于令牌的游戏要求玩家在分发私人令牌后,在游戏期间私下从令牌集合中抓取令牌。例如,在rummy,玩家可以在分发底牌后从牌组中抓牌,在多米诺骨牌中,玩家可以从骨牌堆(骨牌集合)中抓取一张骨牌(dormno)。还如前所述,应当理解,可以以类似于上述子协议的方式创建用于从玩家牌组私下抓取令牌的子协议或其等同物,用于基于在线令牌的游戏。一种方法可能是玩家需要抓取承诺某个值的私人令牌,然后让其他玩家随机输入(在承诺下),并在公开时将输入和承诺值相结合以确定玩家牌组中的令牌位置或游戏中的等价物。可以看出,如同在梭哈扑克中一样,通过立即公开承诺值,可以类似地抓取面朝上的令牌。

像德州扑克或奥马哈扑克这样的纸牌游戏需要提供抓取公共(公用)牌。这些牌是面朝上抓的,有时是连续几轮。例如,在德州扑克和奥马哈扑克中,有三轮公共牌开牌,称为翻牌、转牌和河牌,其中3张是翻牌,1张是转牌,1张是河牌。在本实施例中,这些牌是从上述由服务器创建的作为在牌组洗牌子协议期间计算的主牌组的副本(如实例1中)的公共牌组中抓取的。接下来将描述用于以可验证和可证明公平的方式进行一轮包括开c张牌的公共牌开牌的子协议。

实例4(考虑在具有p个玩家的游戏中以可验证和可证明公平的方式使用剩有m张牌的公共牌组cd抓取c张公共牌的子协议的实例):该子协议的目的是以任何共谋方无法预测或预先确定结果的方式从cd中抓取公共牌。包括的步骤是:每个玩家104a-104n创建c个小于或等于m的随机自然数的列表。每个玩家104a-104n向基于游戏的服务器系统102发送这些c个随机自然数的签名承诺。当基于游戏的服务器系统102已经从所有玩家104a-104n接收到签名承诺时,服务器将签名承诺广播给所有玩家104a-104n。所有玩家104a-104n向基于游戏的服务器系统102公开他们的c个自然数的列表,服务器系统102向所有玩家广播该信息。为了确定第一张公共牌,计算列表中第一个位置的所有值的总和s,并将公共牌确定为cd中第(s%m)+第1个位置的牌。从cd中移除新确定的公共牌,给cd留下m-1张牌。在当前轮中需要开的所有公共牌都以类似的方式逐一确定。基于游戏的服务器系统102向所有客户端终端104a-104n广播由所有玩家104a-104n计算的公共牌和进行的公开。所有玩家104a-104n类似地利用这些公开独立计算和验证基于游戏的服务器系统102计算的公共牌。

参照图10,图10是描述根据本文的示例性实施例的用于在一轮公共牌开牌过程中从剩余m张牌的公共牌组cd中抓取c张公共(公用)牌的子协议的流程图1000。该方法开始于步骤1002,每个玩家104a-104n独立地创建c个唯一自然数的列表k,每个自然数小于或等于m。进一步地,在步骤1004,为k创建加密承诺,并将其发送到基于游戏的服务器系统102。在步骤1006,接收承诺以抓取公共牌。在步骤1008,询问是否接收到来自所有玩家104a-104n的承诺。如果否,则在步骤1010等待,如果是,则在步骤1012向所有玩家104a-104n广播所有承诺。在步骤1014,要求所有玩家104a-104n公开承诺。在步骤1016,公开承诺。在步骤1018,基于游戏的服务器系统102检查公开的有效性,随后在步骤1020,询问是否接收到所有玩家104a-104n的公开。如果否,则在步骤1036等待,否则在步骤1022,计算列表中第一位置的所有值的总和s。在步骤1024,确定第一张公共牌为cd中第(s%m)-1-1位置的牌。在步骤1026,将上述牌从cd中移除,给cd留下m-1张牌。在步骤1028,通过使用列表中的第二、第三等位置处的值,类似地确定该轮的其他公共牌。例如,为了确定该轮的第二张公共牌,使用列表中的第二个值计算s,并且将该牌确定为cd中第[s%(m-l)]+1位置的牌。进一步地,在步骤1030,基于游戏的服务器系统102广播计算出的公共牌和所有玩家104a-104n所做的公开。在步骤1032,玩家104a-104n验证所有公开,最后,在步骤1034,独立地计算公共牌,并与基于游戏的服务器系统102计算的公共牌进行对比验证。

应当注意,如果共谋方包括基于游戏的服务器系统102,则只要除了共谋玩家之外的所有其他玩家都公开了他们对关键步骤的承诺,则共谋方就可以知道关键步骤(如公共牌开牌)的结果。因此,如果该结果不利于共谋,则共谋的玩家可能决定不公开其承诺并中断游戏,并迫使基于游戏的服务器系统102和其他玩家从头开始重新进行关键步骤。可以通过对在游戏的这种可利用阶段破坏游戏的任何玩家处以罚款来阻止和可能防止这种情况的发生,并使上述利用总体上给共谋造成损失,同时保护所有诚实玩家的利益。这样做的一种方式是,作为对在公开承诺阶段断开连接(退出)的玩家的处罚,服务器没收违约玩家的担保品的一部分,以补偿桌上的其他玩家,从而保护其他玩家的利益,每个玩家都可能怀疑该违约玩家与基于游戏的服务器系统102和除其自己之外的所有玩家共谋,并且使违约者断开连接(退出),以防止泄露不利于共谋的特定结果。

分发担保品的原则也可用于确保所有参与玩家的行动及时且一致。例如,当一名玩家反复错误地公开承诺,导致游戏中断时,他的一部分担保品甚至可能会被分发。这个过程使得游戏能够毫不拖延地进行,并且也保护了正在继续游戏的现有玩家的利益。

实例5(考虑用于可验证且可证明公平地进行一轮下注的子协议实例):一些纸牌游戏(如扑克等)通常在确定公共牌或底牌后,会进行几轮交替下注。例如,德州扑克有4轮下注,5张牌扑克有2轮下注。在一轮下注中,典型的行动是下注、加注、跟注、看牌、弃牌等。该子协议的目的是以可验证和可证明公平的方式进行一轮下注。包括的步骤是:基于游戏的服务器系统102要求第一玩家104a-104n采取行动,提交其行动。在给定游戏规则和当前游戏上下文的情况下,需要行动的玩家104a-104n通过决定有效行动来承诺其行动(下注、跟注、加注、看牌、弃牌等)。玩家的客户端终端104a-104n将行动提交给基于游戏的服务器系统102。基于游戏的服务器系统102验证接收到的行动,并检查其在游戏的当前上下文中的有效性。如果发现消息无效,则其要求玩家重新发送有效行动以及最初提交的行动不能被接受的原因,否则基于游戏的服务器系统102将该行动广播给所有玩家104a-104n。基于游戏的服务器系统102要求下一个活跃的玩家104a-104n(既没有弃牌也没有“全进”的人)提交他们的行动。桌上的下一个活跃玩家104a-104n现在以类似的方式行动,并且这种情况持续到根据游戏规则的一轮下注结束。

参照图11,图11是描述根据本文的示例性实施例的以可验证和可证明公平的方式执行一轮下注的子协议的流程图1100。在步骤1102,基于游戏的服务器系统102要求在一轮下注中首先需要采取行动的玩家104a-104n提交行动。在给定游戏规则和当前游戏上下文的情况下,需要行动的玩家104a-104n通过决定有效行动来承诺其行动(下注、跟注、加注、看牌、弃牌等),并将该行动发送给基于游戏的服务器系统102。在步骤1104,在一轮下注中首先行动的玩家104a-104n将行动(下注、叫牌、加注、弃牌等)决定为a。进一步地,在步骤1106,a被发送到基于游戏的服务器系统102,并且在步骤1108被基于游戏的服务器系统102接收,在步骤1110,基于游戏的服务器系统102询问a在游戏上下文中的有效性。在无效的情况下,在步骤1112,要求玩家104a-104n重新发送消息。在有效的情况下,在步骤1114,向所有玩家104a-104n广播a。进一步地,在步骤1116,基于游戏的服务器系统102根据游戏规则决定一轮下注是否完成。如果是,则该过程在步骤1118停止,否则在步骤1120要求下一个玩家104a-104n采取行动,并且该过程在步骤1104继续。

接下来将介绍使用以上定义的子协议以可验证和可证明公平的方式创建用于进行两个流行纸牌游戏(德州扑克和5张牌扑克)的协议的详细信息。

参照图12,图12是描述根据本文的示例性实施例的用于以可验证和可证明公平的方式使用具有52张牌的标准牌组来进行德州扑克游戏的方法和协议的流程图1200。德州扑克游戏使用具有52张牌的标准牌组,玩家104a-104n有两张底牌,总共有5张公共牌,均面朝上开牌,分别是翻牌、转牌和河牌,其中3张是翻牌,1张是转牌,一张是河牌。一个玩家可以使用其2底牌和5张公共牌中的任意5张牌来打出最好的牌。在分发底牌之后,以及在3轮公开公共牌的每一轮之后,都会进行一轮下注。这导致摊牌,其中未弃牌的玩家104a-104n公开其底牌,并决定下注底池的赢家。

为了以可验证和可证明公平的方式进行该游戏,基于游戏的服务器系统102可以以前面描述的方式设置游戏,在步骤1202接受玩家104a-104n连接并初始化游戏,并且在步骤1204进一步设置游戏初始化合约(gic)。在步骤1206,玩家104a-104n提交要在游戏中使用的加密承诺。玩家104a-104n中的每一个玩家独立地为以下各项创建单独的加密承诺:

a.前52个自然数的排列,以对牌组进行洗牌(如在实例1中)。

b.两个小于或等于52的唯一自然数的列表,以抓取2张底牌而不换牌(如在实例2中)。

c.3个小于或等于52的随机自然数的列表,以抓取3张公共牌作为翻牌(如在实例4中)。

d.一个小于或等于49的随机自然数(在抓取翻牌后公共牌组中只剩下49张牌),以抓取1张公共牌作为转牌(如在实例4中)。

e.一个小于或等于48的随机自然数(在抓取翻牌后公共牌组中只剩下48张牌),以抓取1张公共牌作为河牌(如在实例4中)。

在接收到来自所有玩家104a-104n的承诺后,在步骤1208,基于游戏的服务器系统102对这些承诺进行签名并将其广播给所有玩家104a-104n。玩家104a-104n向基于游戏的服务器系统102公开他们对洗牌排列的承诺,并且在步骤1210使用来自所有玩家104a-104n的承诺来执行牌组洗牌子协议(如在实例1中),以产生主牌组md。在步骤1212,基于游戏的服务器系统102将md复制为公共牌组,并且在步骤1214,所有玩家104a-104n将md单独复制为玩家牌组,以确定他们的底牌(如在实例2中)。

在步骤1216,使用下注回合子协议进行一轮下注(如在实例5中)。进一步地,在步骤1218,使用公共牌公开子协议公开3张翻牌(如在实例4中),随后在步骤1220,使用下注回合子协议进行一轮下注(如在实例5中)。进一步地,在步骤1222,使用公共牌公开子协议公开1张转牌(如在实例4中),随后在步骤1224,使用下注回合子协议进行一轮下注(如在实例5中)。进一步地,在1226,使用公共牌公开子协议公开1张河牌(如在实例4中),随后在步骤1228,使用下注回合子协议进行一轮下注(如在实例5中)。在步骤1230,在摊牌期间确定未弃牌的玩家104a-104n的底牌(如在实例2中)。在德州扑克游戏中,当一名玩家104a-104n游戏筹码短缺且不能完全跟注时,可以平分底池,底池的赢家被判定为拿下底池的玩家104a-104n中拥有最好牌的玩家104a-104n。基于游戏的服务器系统102和玩家104a-104n最终在步骤1232根据游戏规则计算并验证在游戏期间建立的每个底池的获胜者。

有趣的是,使用多个复制的牌组(单个玩家牌组和公共牌组)可能会导致相同数值的令牌值重复。例如,一个玩家可以在其从其玩家牌组中抓取的底牌中得到一个“红桃k”,并且在其从公共牌组中抓取的翻牌中也得到一个“红桃k”。如前所述,用于确定最佳牌的规则由中央游戏服务器在设置游戏时定义。这么做的一个简单方法是,在建立最佳牌的同时,允许任何令牌数值只出现一次。应该注意的是,如果需要,可以类似地很容易地修改并且在gsi中的游戏开始期间指定其他基于令牌的游戏的规则,以处理重复数值的情况。

参考图13,图13是描述根据本文的示例性实施例的用于以可验证和可证明公平的方式进行具有p名玩家并使用52张牌的标准牌组的5张牌扑克游戏的方法和协议的流程图1300。使用52张牌的标准牌组的5张牌扑克游戏包括给玩家104a-104n发5张底牌,玩家104a-104n可以选择保留或替换这些底牌,并且不抓取公共牌。根据游戏规则,在摊牌时最后一组底牌更佳的玩家104a-104n被认为是赢家。在分发底牌之后进行一轮下注,在玩家104a-104n更换了他们不想要的底牌之后进行另一轮下注。接下来是摊牌,其中未弃牌的玩家104a-104n公开他们的底牌,并决定底池的赢家。

为了以可验证和可证明公平的方式进行该游戏,基于游戏的服务器系统102可以以前面描述的方式设置游戏,在步骤1302接受玩家104a-104n连接并初始化游戏,并且在步骤1204进一步设置游戏初始化合约(gic)。在步骤1306,提交要在游戏中使用的加密承诺。玩家104a-104n中的每一个玩家都为以下各项创建承诺:

a.前52个自然数的排列,以对牌组进行洗牌(如在实例1中)。

b.5个小于或等于52的唯一自然数的列表,以抓取可以替换的5张底牌(如在实例3中)。

c.每一个其它玩家的小于或等于52的5个自然数的p-1个列表,以确定替换牌(如在实例3中)。

在接收到来自所有玩家104a-104n的承诺后,在步骤1308,基于游戏的服务器系统102对这些承诺进行签名并将其广播给所有玩家104a-104n。在步骤1310,玩家104a-104n向基于游戏的服务器系统102公开他们对排列的承诺,并且使用来自所有玩家104a-104n的承诺来执行牌组洗牌子协议(如在实例1中)。在步骤1312,所有玩家104a-104n分别将得到的主牌组md复制为玩家牌组,以确定他们的底牌(如在实例3中)。在步骤1314进行一轮下注(如在实例5中)。在步骤1316,所有玩家104a-104n使用用于选择可以替换底牌的子协议来替换另外的不想要的底牌(如在实例3中)。在步骤1318,进行另一轮下注(如在实例5中)。在步骤1320,在摊牌期间确定未弃牌的玩家104a-104n的底牌(如在实例3中)。最后,在步骤1322,基于游戏的服务器系统102和玩家104a-104n根据游戏规则计算在游戏期间建立的每个底池的获胜者。

需要注意的是,可以为各种其他扑克游戏、各种其他纸牌游戏、桌面游戏甚至新游戏建立可验证和可证明公平的协议。

如前所述,共谋是在线玩家面临的另一个问题。通常防止和检测共谋的方法可以包括研究玩家的ip和研究玩家或一群玩家的游戏行动。就此而言,接下来将描述一种通过在具有相同游戏设置的游戏桌上随机放置玩家来防止和最小化共谋的可能性的方法。应该理解,这个过程发生在游戏开始之前。

参照图14,图14是描述根据本文的示例性实施例的用于以可验证和可证明公平的方式将p个玩家随机分配到具有相同游戏设置的一组桌子上的p个座位以防止和最小化共谋的机会的方法和协议的流程图1400。该协议的目的是以不可预测和不可预先确定的方式将一池玩家的座位分配给一组具有相同游戏设置(如游戏规则、买入等)的多张桌子的座位,使得共谋中的玩家被分配到同一张桌子的可能性很低。该过程从步骤1402开始,在步骤1402,基于游戏的服务器系统102为玩家104a-104n设置邀请,以获得一组多张桌子上的座位。玩家104a-104n通过在步骤1404向基于游戏的服务器系统102发出请求,并在步骤1406创建新的密钥对并将他们的公钥发送到基于游戏的服务器系统102,来报名在这些桌子中的一张桌子上玩。玩家104a-104n发送到基于游戏的服务器系统102的所有消息现在都被签名。当基于游戏的服务器系统102获得足够的玩家104a-104n(等于托管的桌子上的座位数)报名玩游戏时,则在步骤1408,基于游戏的服务器系统102编译所有报名的玩家104a-104n及其各自的公钥的排序列表l,并且在步骤1410,将该信息广播给所有玩家104a-104n。然后,玩家104a-104n继续在步骤1412创建前p个自然数的排列,并在步骤1414向基于游戏的服务器系统102发送对该排列的承诺。当接收到来自所有玩家104a-104n的承诺时,在步骤1416,基于游戏的服务器系统102向所有玩家104a-104n广播这些承诺。然后,在1418,所有玩家104a-104n向基于游戏的服务器系统102公开他们的承诺。然后,在步骤1420,基于游戏的服务器系统102检查所有公开的有效性。进一步地,在步骤1422,基于游戏的服务器系统102创建前p个自然数的列表q,然后根据所有玩家104a-104n在l中的排序,将从所有玩家104a-104n公开的所有排列应用于q,以获得新列表w。然后,在步骤1424,基于游戏的服务器系统102广播玩家104a-104n所做的所有公开以及w。在步骤1426,玩家104a-104n检查这些公开的有效性。进一步地,在步骤1428,基于游戏的服务器系统102然后根据w和l将玩家104a-104n分配给桌子的座位,也就是说,考虑到v是w中的第一元素,那么第一桌子中的第一个座位被分配给在l中的第v个位置列出的玩家104a-104n,依此类推。然后,在步骤1430,基于游戏的服务器系统102通知玩家104a-104n分别为他们分配的座位和桌子。在步骤1432,玩家104a-104n使用w和l验证为他们分配的座位。然后,基于游戏的服务器系统102可以托管上述桌子,并接受玩家104a-104n的连接,将它们安置在为他们分配的座位上,并如前所述继续设置游戏。可能另外要求玩家104a-104n使用相同的公钥来玩游戏,因为这将帮助玩家104a-104n验证占据他们桌子上其他座位的玩家104a-104n查看游戏初始化信息的有效性。

尽管已经根据某些优选实施例及其说明描述了本文,但是在本发明的原理和精神内的其它实施例和对优选实施例的修改是可能的。因此,认为上述描述和附图是说明性的而非限制性的。

因此,本文的范围由所附权利要求限定,并且包括上文所述的各种特征的组合和子组合,以及本领域技术人员在阅读上述描述后会想到的其变化和修改。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1