本篇基于国外区块链游戏Virtue Poker(虚拟扑克)的白皮书翻译整理而成。面对国内各种鱼龙混杂的白皮书,Virtue Poker的白皮书全面阐释了项目的商业价值,市场现状,用户痛点,最重要是详细的技术实现。既不是模糊不清,也不是完全无法落地的技术解决方案,值得学习和借鉴。
本文并没有进行完整的翻译,部分内容有节选。完整内容请查看官方英文白皮书。
由于本人水平有限,内容肯定存在诸多错误,请在评论区留言指正,谢谢!
Virtue Poker官网
Virtue Poker白皮书
引言
在线扑克从2000年开始到现在,已经成为几亿美元的产业。从一开始就面临和尝试解决两个问题:游戏公平性和玩家的资金安全性。这些问题曾导致一些领头公司破产。
Virtue Poker是第一个基于区块链的在线扑克。玩家不需要将资金转入指定账户。洗牌是随机且数字加密的。
1.1 价值使命
我们不会存储玩家资金,保证每个玩家参与洗牌。
1.1.1 消除玩家的资金存储风险
玩家们使用自己的以太坊账户参与游戏
1.1.2 解决关于游戏公平性的信任问题
使用P2P,加密洗牌协议,每个玩家参与洗牌。并且对每手结果达成共识。
1.1.3 减少玩家消费,创建平衡的扑克生态系统
不需要部署昂贵的服务器,不需要复杂的付款流程。减少玩家的损耗,将资金用于创建良好的生态系统。
1.1.4 建造可扩展的去中心化扑克网络
未来允许开发者和第三方机构基于Virtue Poker开发更多服务。
1.2 短期规划
开发计划:用户界面,分布式洗牌,区块链开发
市场计划:一系列线上线下的预启动规划
1.3 长期规划
打造成B2C平台
允许第三方基于平台进行开发
2.当前在线扑克面临的问题
2.1 介绍
在线赌博在2021年将达到50亿
美元的市场规模。扑克是其中的核心。在线扑克火爆始于2003年电视直播比赛的开始,一个名叫Chris MoneyMaker
的人赢下了250万
美元。
当前,全球在线扑克市场超过2.5亿
美元,欧洲47%
,亚洲30%
,北美13%
,大洋洲6%
,拉丁美洲2%
。
不幸的是,当前在线扑克产业被恶意用户利用,产生很多受害者,爆出一系列丑闻。当前顶级的网站,例如PokerStars
,也在不断改变来解决这些问题。也有很多网站没有适应,导致很多用户对它们不信任。
2.2 滥用玩家资金
2.2.1 Absolute Bet and Ultimate Bet
Cereus Network
承认其前雇员使用管理员权限偷看其他玩家的牌,获利数百万美元。
2.2.2 Full Tilt Poker
2011年4月15日,在线扑克社区称之为黑色星期五的一天,美国联邦检察官,质控三家最大的在线扑克网站的创始人,PokerStars
, Full Tilt Poker
和 Absolute Poker
,强制要求他们停止为美国公民提供真实货币游戏。不久之后Full Tilt Poker
在美国境外重新开放,它被发现少了360万
美元。这意味着该公司侵占了360万
的玩家资金。随后该公司迅速倒闭。
2.2.3 Lock Poker
2015年,Lock Poker
公司倒闭,因为它无法让玩家提款。这些玩家至少损失了150万-240
万美元。
2.3 扑克机器人
扑克机器人可以模仿成真实玩家。它们可以坐在多张牌桌,并且人们无法察觉。它们可能受雇于个人或者公司。
2015年,一个扑克机器人在PokerStars
的0.5/1
美元和1/2
美元牌局中赢取了大约150
万美元。WarBot
公司提供的机器人可以运行在所有的平台上。888基金
甚至发布文章教人们如何对抗扑克机器人。
2017年,卡内基梅隆大学开发的人工智能扑克机器人,打败了四位顶尖牌手。
2.4 第三方工具和软件
许多玩家使用第三方工具和软件,将娱乐玩家作为目标。这些工具包括但不限于:
玩家数据库:可以从不同平台查询那些低胜率的玩家
自动寻座:通过玩家数据匹配自动寻座
搜索玩家:扫描某个平台的大厅里指定条件的玩家
实时显示:显示牌桌上对手的实时统计数据
没有使用这些工具的玩家将会受到不公平待遇。
2.5 不公平的抽水机制
赛事和现金局里都会抽水。赛事平均的抽水为买入的6-10%
。现金局中,每手都会抽水,平均为3-5%
,封顶在$0.30-$5
,根据上限而不同。大部分在线扑克的抽水机制大同小异。
下图显示了PokerStars
当前的抽水机制。第一眼看感觉很合理,高下注玩家抽水会比低下注玩家的抽水高,同时也称为有价值的顾客:
注意在5人
及以上的比赛中,低下注($0.01/$0.02
)的封顶是大盲的15
倍。但是在高下注($3/$6
)的比赛中,封顶是大盲的0.58
倍。
汉堡大学在2011年的研究中,分析了PokerStars
等网站6个月
期间,超过250万
手的数据。每一个玩家在$0.01/$0.02
比赛中,每100手
的平均大盲为12.5
。而在$3/$6
比赛中,每100手
的平均大盲为2.88。下图显示了不同级别的每100手
的大盲:
随着赌注的增加,相对于大盲的抽水戏剧性的降低了。每100手
胜率为4-6 BB
。以在线扑克标准来看,已经很不错了。以当前的抽水结构,大多数赢家将会变成输家,如果他们一直玩低端局。只有那些玩高端局的人才有可能从扑克网站上赢钱。
2.6 崩溃的扑克经济
2.6.1 定义
扑克经济有三个关键词:存款,抽水和提现。随着扑克经济的增长,下面的公式一定成立:
存款 > (抽水 + 提现)
专业的玩家提现净值(意味着他们赢的比输的多),娱乐玩家为负值。这样形成了一个平衡的系统。
2.6.2 问题是
玩家们通过学习和使用第三方工具不断提高水平,去追踪和赢取那些缺少经验的玩家,这导致娱乐玩家越来越不信任在线扑克。
2.7 全球市场破碎
规则限制了经营者的服务范围和能力。
2.7.1 黑市
准许一些类别的扑克游戏或者只允许州内的一些游戏可以玩。
2.7.2 深灰市场
没有明确限制在线赌博或条例并不明确。
2.7.3 灰色市场
对在线赌博有规定,或者对远程经营者们进行了限制。
2.8 经营者类型
2.8.1 境内经营
规定了经营者至少有一个赌博执照,典型的为灰色和深灰市场。他们需要遵守反洗钱协议,并且需要了解自己的客户是哪些人。
知名公司:The Stars Group (PokerStars, Full Tilt Poker) William Hill Online,
Playtech (iPoker network), GVC Holdings (PartyPoker, bwin.party), 888 Holdings, Unibet,Winamax 和其他的一些公司。
2.8.2 境外经营
这些未获批准的经营者在哥斯达黎加,库拉索,塞浦路斯,印度经营。他们属于全球经营,包括了黑市。
知名公司:: PaiWangLuo Network (Ignition, Bovada), Merge Gaming (Carbon Poker), Winning Poker Network (America’s Cardroom), Global Gaming Network, TheHive, Tiger Gaming (Chico) 和更多的其他公司。
许多国家和地区正在开始对在线扑克进行监管和引导。
2.9 有限的竞争
扑克市场将会变得越来越细分化,玩家的选择越来越少,经营者可以借此提高费用。
2.9.1 受监管的B2C市场
本节主要介绍了·PokerStars·的市场分析。
在·PokerStars·玩扑克的两大不利条件:
为了维持服务,
PokerStars
的抽水很高正因为大量忠诚用户汇聚于此平台,
PokerStars
正在不引人注意的情况下逐渐提高费用
2.9.2 不受监管的B2C市场
黑市经营者不太关注平台的反作弊及账号多开的行为,并且政策也不太透明。但仍有许多玩家因为受监管平台有限的玩法以及呆板的赛制而来到这些不受监管的平台。
2.10 随机数证明实践
线上和线下的最大区别是:玩家能否看见荷官洗牌。线上游戏时,玩家只能选择相信洗牌时的随机数生成器起作用。所有线上扑克都有被第三方机构认证的随机数生成器RNG
,还有一些公司是专门测试认证这些RNG
是否中立有效的。
不幸的是,即使有测试技术的存在,很多线上扑克公司在获取RNG
证书后都表示不需要对其定期测试。
2.11 总结
有很多不利于在线扑克玩家的地方。玩家们需要面对恶意软件,平台的高额抽水。监管市场里平台比赛呆板,但是非监管市场平台又不透明,缺少责任。总的来说,全球扑克经济更加紧张。
3. Virtue的解决方案
Virtue Poker花费了几年时间进行研究,力图打造基于信任,透明的,有责任心的去中心化在线扑克产业。通过使用以太坊区块链,P2P网络,用户身份验证,加密技术,来提升用户提升,降低用户花费,打造返水结构,构建安全保密的在线扑克平台。
3.1 用户流程
无服务器,不需要存储用户资金,所有玩家参与洗牌。
3.1.1 下载客户端
客户端基于Windows
, Mac
或者Linux
。客户端包含洗牌器,游戏引擎,用户界面。
3.1.2 注册
用户申请UPort
身份,数字签名其国家,住处,年龄。关于UPort
的介绍,可以查看这篇文章:uPort的简单理解:基于区块链的随身个人证明文件袋。
3.1.3 内置钱包
用户被引导到客户端内置的轻钱包页面。
3.1.4 创建游戏或加入游戏
用户在大厅参加公开的比赛,或者创建私人比赛并邀请他人加入。
3.1.5 买入
用户加入牌桌,需要向牌桌智能合约地址发送以太币
或者VPP
代币。智能合约作为了一个第三方账户。
3.1.6 游戏进行
牌桌使用P2P网络,利用Mental Poker
协议,使每个节点参与洗牌和加密。
3.1.7 游戏结束
每当比赛或者现金局结束,牌桌合约自动结算并向赢家发送报酬。
3.2 Virtue Poker组件
Virtue Poker平台由一系列子组件组成了应用程序:
3.2.1 uPort
使用uPort
作为注册和身份验证机制来组织未成年人赌博以及账号多开的问题。
3.2.2 以太坊智能合约
在平台上作为所有当前比赛的大厅
作为一个临时的第三方服务,为玩家们提供牌桌
作为存储游戏指定参数,例如买入数量,支出百分比和游戏类型的资源库
报告游戏结果
3.2.3 游戏客户端
游戏客户端是一个桌面应用程序。其中的游戏引擎执行游戏逻辑,使用Mental Poker
协议洗牌,包含了一个轻钱包,在给定的牌桌中连接其中的所有玩家。
3.2.4 P2P消息
P2P消息主干使用通讯及同步工具,保证同一牌桌的用户界面保持一致。
3.2.5 IPFS
记录平台上所有的hand history
。这些记录可以被审计或我们的游戏安全小组查看。
3.3 身份管理
Virtue Poker使用自主身份验证程序uPort来验证用户是否可以登录游戏。流程如下:
用户下载
uPort
手机app,创建一个uPort
账号,然后扫描第三方出具的身份证明。这个证明将加密存储在IPFS
上。用户会受到一个关联了他们身份证明的uPort
账号。用户使用
uPort
app扫描Virtue Poker客户端提供的二维码,来创建Virtue Poker
账号。一个包含了用户
uPort ID
的请求会发往Virtue Poker
的账号智能合约,该智能合约会从第三方检查并验证用户身份。如果验证成功,用户的
uPort ID
将与用户的Virtue Poker
账号地址匹配,并且存储在Virtue Poker
的玩家注册信息中。
3.4 以太坊智能合约
在用户验证过身份并创建了账号后,用户将被带往大厅,也就是赌场(大厅)智能合约。
3.4.1 赌场(大厅)合约
赌场合约扮演了大厅的角色,包含了所有可用的比赛和最近结束的比赛。同时提供创建比赛,赛事匹配,用户及赛事管理的任务。
3.4.2 牌桌合约
牌桌合约表示一场比赛。当玩家接受了一系列详细的规则和限制后,一个新的牌桌合约便被创建,玩家就开始比赛。当游戏结束后,赢家获得了奖励,玩家离开后,牌桌合约便关闭了。
游戏进行时,牌桌合约有这几个作用。首先,它存储了比赛的规则和设置信息。其次,它也包含了所有的玩家信息。它也代管了游戏中所有的资金。最后,它负责分配奖金。
3.4.3 玩家与牌桌合约的交互
在以下情况下,玩家会向牌桌合约发送交易:
加入牌桌
每手结束后
当游戏完成(赛事)或当玩家离桌(现金赛)
我们的目标是将发送到智能合约的交易数量将至最低,以减少燃料消耗,并且提高游戏速度。
牌桌合约包含了一个计数器来追踪每个玩家的下注。在每一手结束后,每个玩家和公正人员使用密钥签署结果,并且向牌桌合约发送交易来更新每个玩家的下注来确保一致性。这种一致性原理和交易的提交,是由节点,以及被称为oracle
的牌桌方法发起的,可以使合约保持游戏状态的更新,并且知道什么时候该付钱给玩家。这是个异步过程,意味着玩家不用等到上一手的结果写入到区块后才能进行下一手的操作。
3.4.4 多个牌桌的比赛合约
对于比赛来说,会涉及到多个牌桌。多牌桌的比赛合约扮演了一个组织工具,来管理不同的牌桌。任何比赛的存在都高于牌桌本身,被此合约管理。
3.4.5 公正管理合约
一个公正人员是客户端软件中的特殊案例,没有牌,也不下注。他们作为可信节点,从外部获取报酬。公证人员被随机分配到每张桌子,负责解决争议和记录游戏数据。
为了分散工作量以及阻止公证人员与玩家勾结,他们是被随机分配到每张牌桌的,并且在固定手数后进行轮换。公正合约负责有公正人员可用,并且将他们分配到牌桌。
3.5 Mental Poker
3.5.1 概览
某本书提出过:有没有可能,使用加密计划和通信协议,来让不同地区的两个人,在一场虚拟扑克比赛中共同洗牌和进行游戏,而不通过第三方的信任背书?多年间有无数的书出版,针对这个问题进行论述和讨论。
然而,很少有使用Mental Poker
这种技术的软件和应用。这是因为密码学包含庞大的计算和通信资源,导致软件使用时会非常缓慢。另外Mental Poker
这种内在的点对点性质,非常难于与传统的基于服务器的在线游戏模型相匹配。
Virtue Poker小组花费了近两年时间研究,如何将区块链与分布式存储技术,以及点对点网络进行融合,以解决这些难题。成果是:一个可下载的应用程序,技能快速进行游戏,又能利用以太坊区块链管理玩家以真实金钱进行下注。
Mental Poker
使用加密技术确保每一个单独的玩家无法读取牌桌。使用一种方法让所有人合作洗牌后,每张牌才可以被展示。这种协议使用通信加密技术:牌可以按照任何顺序加密和解密。
3.5.2 Mental Poker算法:两轮传递之加密洗牌
三个玩家,Bob,Alice,Ted,在同一个桌子上玩德州扑克。Bob是Dealer
,他在自己的电脑上生成一张有52张牌的牌桌。只有他可以看见这些牌。然后他使用Fisher-Yates
洗牌算法洗牌,用同样的密钥为每张牌加密,使得除了他自己,每张牌都不可读。接着他将加密的牌桌传给Alice。Alice重复此操作,然后将牌桌传给Ted,Ted进行同样的操作。
3.5.3 两轮传递之加密确定牌序
现在牌的最终顺序已经决定好了。从1到52,这个顺序将贯穿这一手的始终。Ted将加密三次的牌桌还给Bob。Bob解除他的洗牌锁BS
,然后用不同的加密方法为每张牌按顺序进行加密,B1,B2......B52
。然后他将牌桌传给Alice,Alice同样解除她的洗牌锁AS
,然后为每张牌按顺序进行加密,A1,A2......A52
。接着传给Ted做同样的操作后,将牌桌还给Bob。
3.5.4 解密并开始游戏
Bob开始发牌。他将第一张和第二张牌发给自己。由于Bob只能解开第一张和第二张上自己的密钥B1
,B2
,但是这两张牌上还有Alice和Ted的加密锁A1
,A2
,T1
,T2
,所以此时他无法查看这两张牌。于是Alice和Ted将A1
,A2
,T1
,T2
的解密密钥发给Bob解密,这样Bob就可以看见他的这两张牌了,并且保证只有他自己能看到这两张牌。Bob继续发牌,他将第三张和第四章牌发给Alice。Alice只可以解密这两张的A3
,A4
加密锁,所以Bob和Ted将各自的B3
,B4
,T3
,T4
的解密密钥发给Alice解密。Bob继续将第五和第六张牌发给Ted。像之前一样,Ted解密后也可以看见自己的牌。
现在Bob开始发公共牌,第七张,第八张和第九张。每个人取出自己的解密密钥,B7
,B8
,B9
,A7
,A8
,A9
,T7
,T8
,T9
进行解密,这样大家都可以看到公共牌了。如果有必要,接下来第十张和第十一张也是像刚才一样解密供所有人查看。
3.6 Peer to Peer 消息
3.6.1 P2P消息使游戏客户端保持同步性
要实现Mental Poker,玩家们只需要一个P2P网络,而不需要去信任一个中心化的扑克服务器。游戏客户端由前后端组成。前段用于为本地用户展示游戏状态,接收输入然后传给后端,由后端将消息广播给其他客户端。后端包含一些逻辑,例如游戏规则以及其他客户端传来的输入信息。这样可以使所有游戏客户端保持一致性。
3.6.2 离链游戏
以太坊有很多优点,但是无法作为服务器使用。因为以太坊的交易写入区块最快都会有几秒的延迟。使用客户端搭配P2P网络可以保证安全性(例如加密解密)并且保证游戏的平滑性。每一手结束后的结果才会作为交易写入区块。
3.6.3 IPFS
有大量的游戏记录需要进行存储。而使用以太坊区块链记录所有数据是不切实际的,很大的一个原因就是写入交易需要花费大量的燃料。
IPFS是一种可靠的,分布式的数据存储技术。在每一手结束时且在向区块链提交数据前,客户端会向IPFS发送游戏记录。IPFS存储后返回一个哈希值。这个哈希值里面包含了向区块链提交的数据。大量数据转换为一个短小的哈希值再存入区块链,大大降低了数据量和燃料消耗。并且凭借这个存储在区块链中的哈希值,我们可以反向从IPFS取回原始数据进行查看。
4.游戏安全性
4.1 在线扑克作弊行为列表
4.1.1 勾结
多个玩家在同一牌桌勾结作弊
4.1.2 账号多开
某个玩家在同一牌桌多开账号作弊
4.1.3 数据挖掘
获取其他玩家打牌习惯的数据
4.1.4 扑克机器人
4.1.5 账号分享
高玩使用低端玩家账号进行游戏
4.2 使用公正系统对抗游戏作弊行为
Virtue团队开发了公证系统来对抗游戏内勾结和作弊行为。公正人员随机被派往不同牌桌,他们提供安全性以换取小费。他们签署每一手的交易,提交记录到IPFS。每隔几手便会随机重新分配到不同牌桌。
下面描述的方法是自动的:用户不需要在人工监督下来运行公正人员节点。
4.2.1 公证人员的三个核心方法
4.2.2.1 解决争论
玩家对每手或者每局结果有争议,公证人员可以解决争议并且判定谁是赢家。
4.2.2.2 提供数据
公证人员需要将每手的每个行为数据上传至IPFS进行存储。这些数据用来检测是否有勾结、机器人及账号多开等行为。
4.2.2.3 保存玩家的部分密钥
因为所有玩家必须共同对扑克加密,如果有玩家掉线,为了保证游戏正常进行,公正人员有权代替掉线玩家对扑克进行加解密。
用户可以下载公证人员的客户端成为公正节点。
VPP:虚拟扑克积分
积分有三种核心用途:
游戏内货币
公正人员的小费
参加指定比赛
5.1 成为公正人员
只有少量的用户会成为公证人员。想要成为公证人员,需要做到以下几点:
获取vpp
抵押vpp到公正系统(公正系统智能合约)中
开启电脑,运行公正软件程序,激活以便被分配到牌桌
5.1.1 提交数据的检查流程
一开始,公证人员提交到IPFS
的内容会由游戏安全专家小组进行检查。这个小组包括廉政及安全专家。这个小组帮助开发小组构建公正系统,设置追踪程序来检测平台上的危险行为。
有两种方法可以将作弊行为提交给专家小组。一,玩家可以对作弊行为进行举报。二,使用算法,对公证人员提交的数据进行解析,并对其中的可疑数据人工检查。如果作弊行为成立,玩家会受到永久封号的处罚。
5.1.2 公正人员小费
下面是公正系统示意图:
- 成为公证人员
- 购买VPP
- 抵押VPP到智能合约
- 成为公证人员
- 任务分配
1.下载软件,保持激活状态
- 指派到牌桌,每隔几手重新分配
- 任务分配量的多少是根据抵押VPP占总抵押池的百分比决定。抵押的
VPP
越多,获得的任务就越多,获取的小费也就越多
- 工作内容
- 检查游戏数据并提交到
IPFS/Swarm
- 解决争端
- 有玩家掉线时,帮助加解密以保证游戏顺利进行
- 游戏公正检测
- 公证人员和玩家加密签署每手数据,由公正人员提交到
IPFS/Swarm
- Virtue Poker访问储存的数据
- 使用算法检测异常数据
- 专家小组核实作弊行为,并对玩家和公正人员进行处罚
这里并没有具体说明小费是如何构成的,我估计应该是以下几点:
公正人员抵押的
vpp
。因为公正人员可能因为疏漏或者故意作弊被处罚,他抵押的vpp可能会被没收玩家提起争议诉讼时可能需要缴纳一定的
vpp
作为争议费用玩家作弊行为被查实,他的
vpp
可能会被没收Virtue Poker应该会拿出一部分
vpp
作为奖励基金
5.2 作为游戏中资产
5.3 某些指定比赛只能使用VPP参加
6.路线图
6.1 关键活动
6.1.1 平台开发
Virtue Poker已经花费三年时间在平台开发上,并且会持续打造一个全功能平台。Virtue Poker将会雇佣开发者来提高P2P消息主干,打造用户界面,完善智能合约及存储方式。另外,也会使以太坊项目更为完成,例如打造分布式存储,身份管理以及稳定的货币。
6.1.2 市场
Virtue Poker将会和拥有大量预算及用户的当前市场巨头竞争。将会致力于打造有担保的,免费的,退水机制的,基于市场分析的,并与合作伙伴一起成长的市场。
6.1.3 赞助和公共关系
Virtue Poker将会赞助流行的扑克论坛,网站,博客以及其他事务。另一方面,团队将会采取积极的PR宣传政策,让更多人感受到我们的价值使命。
6.1.4 法律
团队将会向那些受人尊敬的游戏法律公司,例如: DLA Piper
, ISOLAS
和Ifrah Law
进行咨询,并且接受全球监管。我们将持续咨询适用的法律和监管框架。我们将优先保证平台遵循了那些标准,以保证玩家利益获得充分的保障。
开发路线图
6.2.1 当前情况
Virtue Poker构思于2015年5月,过去的两年一直在开发原型。
我们的程序已经在开发完成后进行了几周的测试,我们已经在小组内部已经在以太坊的测试网络上进行了游戏。
第一个版本的客户端是基于Python
语言的,并且为每个牌桌创建了智能合约。我们的小组成功的使用心理扑克协议进行洗牌和游戏引擎。游戏引擎使用P2P消息协议连接其他节点,同时连接了以太坊,以便创造牌桌和加入牌桌。当前,程序可以进行每局6手
的游戏,以及每小时保持70-80手
的效率进行游戏,这和当前的在线扑克游戏保持同样的标准。
6.2.2 未来的开发打算
Virtue Poker已经雇佣了核心团队,将会使用内部资金,继续打造团队及平台。我们其中的一个目标是将桌面app
重新设计为跨平台应用。为了使平台成功,我们必须经历大量测试,以保证游戏足够公平。注册和身份验证机制将阻止低级别的账号多开及未成年赌博。数据存储机制将对作弊行为进行追踪。
- 改进P2P消息主干
应用程序使用了运行时-可交换的插件来实现消息传输,当前使用的是基础的HTTP
服务。未来部署时会使用更加工业级别的主干。
- 公正性实施
作为一致性原理的一部分,一个公证人员可以阻止两名玩家在一个三人局中使用破解的客户端进行作弊,这是其他51%
共识机制做不到的。
- 商业级别的前后端
Virtue Poker将会重新设计客户端界面,为第一轮测试用户打造用户界面。
6.2.3 2018年第一季度
- 身份管理
起初,我们会集成第三方身份验证服务(https://www.hooyu.com/)。当我们继续与全球监管者合作时,我们会使用自主身份验证解决方案,例如uPort。我们的目标是打造去中心化的登录系统。
- 数据存储
Virtue Poker将使用公正节点收集并存储每手级别的数据。我们打算将这些数据存储到IPFS
,并将引用作为数据添加到牌桌合约中。起初在Alpha
版本我们会使用中心化的存储机制。
6.2.4 2018年第二季度
- Alpha私密测试
我们进行私密测试,目的是找出bug
以及修改UI/UX
。参与第一轮代币购买的用户将会被邀请参加测试。
- 面世前活动
我们会组织面世前的活动,邀请线上及线下知名选手在Twitch
上进行演示。
6.2.5 2018年第二和第三季度
- 退水机制
基于用户测试结果,我们将实现使用vpp
的退水机制。
- 打造多桌比赛方法
多桌比赛合约管理赛事的牌桌以及分配选手到指定牌桌。并且管理着赛事进度和结果。P2P子网络将会和多桌比赛的智能合约进行通讯。
- 公测
面向全球玩家的公测
6.2.6 2018年第四季度
- 举办全球公开赛
6.2.7 2019年
- 集成第三方运营商
Virtue Poker将会对全球的第三方运营商和有许可的机构开放,在我们的基础架构上举办赛事。这将会迅速提升我们的知名度和现金流,将吸引大量玩家。
7.团队介绍
主要由核心团队,顾问,法务合作伙伴组成。
8. 附录:Virtue Poker架构
Virtue Poker仍然处于开发中,这部分的内容可能会有变动。
8.1 系统架构
Virtue Poker全部基于去中心化平台。为了达到这个目的,将使用新的技术例如以太坊,IPFS以及其他解决方案。
桌面程序是跨平台的。包括游戏引擎,游戏客户端,以及与以太坊的通讯网络,也就是P2P子网络,以降低游戏延迟性。
8.1.1 组件
跨平台应用的主要组件有:
游戏引擎:包括扑克游戏逻辑
以太坊:作为游戏参数,第三方服务,结果汇报,多桌玩家管理,公正管理
游戏网络:一个独立组件以便引擎与外部世界通讯
P2P网络:由游戏网络管理的子网络
Web3.js:以太坊提供的
JavaScript API
,用来与以太坊节点通信跨平台程序
扑克游戏客户端:用来进行游戏。使用
React
编写的HTML5
网页程序IPFS客户端:使用
IPFS
网络存储游戏记录
8.2 游戏引擎
8.2.1 状态机
游戏引擎是我们程序的核心,一个有限的机器控制着包含了游戏状态和游戏规则的交易。依靠用户与程序的交互,以及网络相应,游戏引擎触发行为并且切换到下个状态。
8.2.2 连接或者离线状态
当用户登录程序时,Virtue Poker执行以下流程:
程序未连接,我们处于离线状态
用户输入登录信息然后尝试登录
游戏引擎接收输入信息,触发登录行为
登录完成后,引擎切换下一状态并且通知改变UI
如果登录成功,连接成功
如果登录失败,保持用户处于离线状态
8.2.3 大厅状态
游戏引擎状态分为两类:
游戏进行状态:游戏进行时的状态
大厅状态:除了游戏进行时其他所有的状态
大厅状态包括:
离线:用户未登录
已连接:用户已登录,可以创建牌桌或加入牌桌
创建牌桌
加入牌桌
牌桌闲置:用户等待其他用户加入牌桌以便开始游戏
8.2.4 游戏进行状态
游戏进行中的状态包括:
On Deck:玩家等待开始
Start Hand:所有玩家已经做好了准备
Shuffle:洗牌并加密
Deal:
pre-flop
,flop,
turn
和river
Bet:玩家们根据情况选择
check
,bet
,fold
或者raise
Check Deal:游戏引擎根据规则决定是否继续发牌
Showdown:
displayed
或者mucked
Resolve:展示手牌
Report:将结果发送给游戏/牌桌合约,胜者收到奖励
8.3 以太坊牌桌合约
单独在以太坊区块链上进行扑克游戏需要大量资源和时间(以太坊全网现在仅支持每秒25笔交易)。为了使游戏平滑进行,牌桌合约设计用于管理玩家,验证每手结果,将游戏逻辑交给链下处理。
8.3.1 方法
VirtuePokerTable:使用给定的参数初始化牌桌
Join_table:加入牌桌,使用给定的参数创建玩家结构体,如果报错便返回报错信息
Get_player_seat:返回玩家座位号,如果没有返回-1
Get_player_p2pid:根据玩家座位号返回P2P的
ID
,如果没有返回空字符串Hand_results_hash:根据玩家提供的参数计算一个哈希值
Recover_sig_addr:返回与地址关联的密钥对,用来签署哈希值
Report_hand_results:验证是否所有玩家都对游戏数据进行了签名,如果报错便返回报错信息
Leave_table:玩家离开牌桌,将收入返还给玩家
8.4 游戏网络
游戏网络提供了通讯接口,我们有两条主要的通讯流:
使用P2P网络与其他玩家通讯
使用Web3.js与以太坊网络通信
加入一个牌桌就是一个用户与以太坊通信的例子。
当玩家加入牌桌,他们需要从钱包发送资金用以买入。游戏网络另一个重要的部分便是对你的存储资金负责:使用密钥这种私密安全的方式。
8.4.1 密钥
密钥对,公共密钥和私有密钥,代表了你储存在钱包的资金:
公共密钥是一个地址,用来收款
私有密钥用来发送资金
发送资金以便交易,而交易使用了私有密钥签名。你的资金的安全性和你的私有密钥成正比,如果有人获取了你的私有密钥,他也会获取你的资金。
我们的密钥存储使用了同样的密钥到处方式(Scrypt
),对称密码(AES-128-CTR)
,并且使用Geth
作为消息鉴定代码。Geth
是以太坊官方Go
语言协议。
你的密钥存储在你的本地存储中,被密码保护着。在进行游戏时需要使用到它。
8.5 P2P网络
P2P网络负责用户除以太坊网络外的所有通讯。在DApp
环境中,这称为离链。以太坊网络中,DApp
执行的所有交易都要消耗燃料(也就是一定的以太币),所以我们需要DApp
更有效率。我们致力于限制合约(代码)的大小,限制基于以太坊的通讯,来减少不必要的花费并且提升游戏速度。
我们的P2P网络不是用来作为一个频道,而是作为子网络,负载其他所有客户端同意另一个离链客户端发生的情况。这是一种区块链验证同意,但是不可回退及重复的一种方式。
在每手开始时,同一桌的玩家们同时执行roll-call
来确认其他玩家的消息,他们一致同意谁将被包含在下一手中。
8.6 Web3.js
Web3.js
是一种以太坊JavaScript API
,是以太坊小组创建的官方库。我们使用它来:
编译合约:在编译为
web3
之前,我们的合约需要进行预编译和测试。编译合约为web3
语言,然后才可部署合约。部署合约:
web3
提供一个简单及安全的Javascript API
用以部署合约合约呼叫:合约部署后,任何呼叫合约的方式都以
web3
接口实现交易:使用
web3
调用合约
8.7 Electron
我们的桌面应用程序是基于Electron
开发的。基于Electron
已经开发出了很多基于以太坊的成功的产品,例如Mist
,Atom
, Visual Studio Code
和the Jaxx Wallet
。Electron
是一个开源框架,由Github
创造,使用JavaScript
, HTML
和CSS
等网页技术开发本地应用。我们选择Electron
的原因有:
它是跨平台框架:一次编码可以用于多个平台。在我们的案例中,平台包括
Windows
,Mac
和Linux
它是基于网页技术:我们使用同一种技术开发程序,不需要为不同平台雇佣不同的开发者
改善开发费用:我们雇佣的人才不需要精通不同平台的开发,降低开发费用
改善开发速度:使用
Electron
开发,不需要开发不同平台,这会提升我们的开发速度
8.7.1 Electron架构
Electron架构基于:
Chromium:由
Google Chrome
和Chrome OS
提供的浏览器引擎,允许我们使用web
技术进行开发NodeJs:
Node
是一种Javascript
引擎,基于Chrome/Chromium V8
Javascript
引擎,可以访问系统资源(例如文件系统)
每一个新版本的Electron
都提供了最新的Chromium
和NodeJS
版本。当前文章编写时,Electron
版本为1.6.11
,包括:
- Node 7.4
- Chromium 56.0.2924.87
- V8 5.6.326.50
更多信息访问: https://electron.atom.io/。
8.8 扑克游戏客户端
8.8.1 游戏客户端架构
我们的游戏客户端使用React React-Redux
架构。
8.8.2 游戏进行
游戏UI包含两个主要的组件,以不同的窗口显示:
大厅
牌桌
当用户开始游戏,他处于大厅中,并可以执行以下操作:
登录
创建牌桌
查看所有可加入的牌桌
加入游戏:加入牌桌或者赛事
钱包管理:用户可以管理
virtual poker
钱包玩一局游戏:以新的窗口显示牌桌开始游戏
同时玩多局游戏:用户可以同时加入不同的牌桌进行游戏