棋牌类游戏在区块链中的设计探讨
简介
随着区块链的发展,特别是以EOS、GXC为代表的高性能区块链的崛起,为区块链游戏带来了非常大的活力。这里想探索一下棋牌类游戏如何以比较完美的姿势上链,并且结合区块链的特性打造超越传统中心化游戏体验并且公开透明、公平可信的游戏。
-
棋类游戏
棋类游戏有一个特点,就是所有的信息都公开,双方在一个公平公开的初始环境下进行对抗,如围棋、象棋、五子棋等都是棋类游戏。区块链这种信息公开透明的环境是对棋类游戏非常友好的,在eos的官方demo里面也实现了一个非常简单的tic-tac-toe的小游戏,在国内叫井字棋,有兴趣的可以使用google搜索tic-tac-toe,在首页就可以玩这个小游戏了。 -
牌类游戏
牌类游戏跟棋类游戏不同的地方在于,它的游戏性依赖于随机性以及保密性,在这基础上进行猜测与对抗,如21点、斗地主、麻将都是牌类游戏。事实上区块链的智能合约并不特别适合开发牌类游戏。
待解决的问题
-
用户体验问题
这是棋牌类游戏在区块链上实现需要共同面对的问题。事实上也是一个性能的问题即使以EOS的性能,在棋牌类游戏上也仅仅是勉强能满足要求,比如延时小于1s,在实际的应用确认中延时往往是要超过1s的。如果所有的操作都在链上实现,是不能满足人们被日益养刁的胃口的,有延时或卡顿会让用户失去兴趣。 -
随机性与保密性问题
牌类游戏还会遇到随机性与保密性的问题,如何产生随机数保证游戏的公平,以及如何保证在游戏结束前的保密性保证不被其他人从其他渠道获取到数据。这个两个问题若无法解决,那么牌类游戏就没办法在区块链上运行。
链下系统解决用户体验
单纯使用区块链技术,在目前是没有办法解决游戏的延时问题的,因此采用链上系统与链下系统相结合,将两种系统的优势发挥到最大才是当前能提供完美用户体验的优选方式。那么如何结合呢?我理解大致的流程应该如下:
- 链上启动—>链下执行—>结果复盘
先在区块链上注册一局游戏,这个注册过程可以完成游戏数据的初始化;然后链下服务端(对这里需要一个中心化的服务端)根据游戏初始化的结果与客户端进行通信,完成整局游戏;将游戏的每一步结果上链,最终由合约判定结果,分发奖励。链上启动保证了初始条件的公平,链下执行保证了游戏开始后的用户体验,结果复盘这个很重要,它不是仅仅将游戏结果而是将整个游戏过程上链,保证游戏结果不会被篡改,保证公开公正。
预上送Hash解决随机性问题
关于区块链的随机性问题,已经有着比较成熟的解决方案了。那就是游戏参与方首先将自己的随机数Hash上链,这样可以保证各自的随机数产生之后不会再改动,然后再将随机数上链并将各方的随机数合成到一起成为一个真正的随机数,这过程由于各方均无法预知对方的随机数因此也就不存在作恶的可能。比如斗地主游戏,可以这样设计:玩家A、B、C与服务器S各自产生一个随机数以及随机数对应的Hash,在开局时A、B、C、S将随机数Hash先上链,然后A、B、C将各自的随机数发送给S(此处可以是链上操作也可以链下操作),然后S将四个随机数合成为随机数种子通过一定的随机算法产生随机的牌序列,在链下开始游戏;进入复盘阶段后S需要将自己的随机数以及整个的游戏的过程上链进行复盘,合约要校验A、B、C、S的随机数的Hash是否与开始时的Hash一致。
随机算法可信性
上面提到了一个问题,就是如何使用一个随机数产生一个牌序列,这个算法要保证链上与链下算法的一致性,在复盘时需要校验,这样才能保证可信。
可信计算解决保密性问题
牌类的保密性问题如何解决,如何能保证服务端不作恶?上述复盘的方式可以保证服务端不会通过改变牌序列来作恶的问题,但是无法保证服务端的信息泄露的问题,若有人能窥探到服务端,那他就相当于有了上帝视角。如何避免这种情况发生呢?首先这种情况是无法完全避免的,传统的游戏厂商事实上也没法完全避免,大厂们肯定是会加强自己的服务端的管理制度从行为上杜绝这种情况的发生,因为保证游戏公平性是他们的长久立足的根本。但是小的游戏厂商,若中间再有点菠菜性质,那么用户事实上就是待宰的羔羊。那么作为一个区块链的小游戏如何从技术的角度去缓解这种问题的发生呢?可信计算可能是一个相对较好的解决方案。将服务端搭建在可信执行环境所有的内部数据均不出可信执行环境,让外界也很难在实际执行过程中获取到游戏数据。这里的可信执行环境可以是intel的sgx也可以是其他tee实现。
解决数据分发时的链路保密问题
游戏数据分发时,比如服务器要给A发一张牌,那在链路上如何保证这张牌不被别人看到呢?这个可以用A的公钥来保护加密下发,那密文就只有A才能解开其他人均无法识别。并且由于是区块链系统A的公钥就是现成的因此这个功能很容易就能实现。
总结
这里简略的探讨了一下棋牌类游戏在区块链上的实现,给出了用户体验、随机性以及保密性这三个核心的问题的相对可靠的解决方案。当然实际的游戏设计上还会有很多的细节问题,这里就不展开了。
我们是区块链研习社公信节点,致力于做GXChain共识与生态推动者。欢迎大家投票支持,节点名称:chainclub-bp