基于区块链智能合约的牌类游戏防作弊方法及其系统
技术领域
本发明涉及一种防作弊方法及其系统,具体的说是一种基于区块链的牌类游戏防作弊方法及其系统,属于区块链技术领域。
背景技术
目前牌类游戏平台防止玩家篡改花色的方法是基于中心化节点的,即通过租赁第三方网络服务器来备份存储玩家的数据,从而保证游戏的公平性。
只是目前这种防止玩家作弊的方法主要存在着以下几个问题:
1.数据传输过程中被破坏的风险较大,传输的过程中很容易造成瑕疵、断点、不完整等问题,这种方法使数据需要多方人员处理,增加了数据中转的次数从而增加数据被篡改的风险,完整性也可能被破坏。
2.这种方法对第三方网络服务器的依赖较大,一旦第三方网络服务器遭受恶意入侵或者意外宕机,第三方网络服务器及其所控制的若干服务器上的电子数据将面临整性、隐私性和可修复性等巨大安全隐患。
3.由于这种中心化的方法无法保证第三方网络服务器是完全安全和公平的,用户往往会对第三方网络服务器的诚实程度产生质疑,担心自己所上传的数据被泄露或者恶意破坏,不利于系统与用户建立长期的信任关系,从而可能导致用户与平台之间的信任危机,双方建立可靠的信任机制所需的时间较长。
4.这种方法需要租赁第三方网络服务器,成本较高,增加了经济负担。
针对现有技术的这些问题,需要提出一种公开透明、无法篡改、便于追溯的,经济负担较低的基于区块链的牌类游戏防作弊系统。
发明内容
本发明所要解决的技术问题是,克服现有技术的不足而提供一种公开透明、无法篡改、便于追溯的,经济负担较低的基于区块链的牌类游戏防作弊方法及其系统。
本发明提供一种基于区块链智能合约的牌类游戏防作弊方法,包括以下步骤:
步骤一、获取玩家在游戏开始时抽取到的牌的花色和数字信息,每发出一张牌给玩家就将该张牌的花色和数字存储到区块链;
步骤二、将发出的每张牌的花色和数字通过编码方法进行编码,并对生成的编码进行移位压缩;
步骤三、将步骤二中压缩后的编码按花色和数字大小排序,并将排序后的编码通过加密算法生成哈希值A,存入区块链中;
步骤四、游戏过程中,玩家每出一次牌就将该牌的花色和数字存储到区块链;
步骤五、将玩家打出的每张牌的花色和数字通过编码方法进行编码,并对生成的编码进行移位压缩;
步骤六、将步骤五中压缩后的编码按花色及数字大小排序,并将排序后的编码通过加密算法生成哈希值B,存入区块链中;
步骤七、比对区块链中赢家的哈希值A与哈希值B,若两者相同则判定未有作弊行为发生,若不相同则判定存在作弊行为。
作为本发明的进一步技术方案,所述编码方法为哈弗曼编码方法和merkle-tree方法的结合。
进一步的,所述加密算法为MD5算法和SHA256算法的结合。
进一步的,所述步骤一中获取玩家在游戏开始时抽取到的牌的花色和数字信息借助基于TCP的Socket通信来实现客户端和后端系统之间的数据传输。
进一步的,所述基于TCP的Socket通信具体包括:
S1、服务器端定义ServerSocket对象实例,监听来自客户端的连接请求;
S2、在客户端定义Socket对象实例,向指定的服务器发起连接;
S3、按照一定协议对Socket进行读写操作,完成数据的计算和交互;
S4、关闭输入流、输出流和双方的Socket。
本发明还公开了一种基于区块链的牌类游戏防作弊系统,包括:
发牌信息获取模块、用于获取玩家在游戏开始时抽取到的牌的花色和数字信息,每发出一张牌给玩家就将该张牌的花色和数字存储到区块链;
发牌编码压缩模块、用于将发出的每张牌的花色和数字通过编码方法进行编码,并对生成的编码进行移位压缩;
发牌排序存储模块、用于将发牌编码压缩模块中压缩后的编码按花色和数字大小排序,并将排序后的编码通过加密算法生成哈希值A,存入区块链中;
出牌信息获取模块、用于在游戏过程中,将玩家每出一次牌的花色和数字存储到区块链;
出牌编码压缩模块、用于将玩家打出的每张牌的花色和数字通过编码方法进行编码,并对生成的编码进行移位压缩;
出牌排序存储模块、用于将出牌编码压缩模块中压缩后的编码按花色及数字大小排序,并将排序后的编码通过加密算法生成哈希值存入区块链中;
比较模块、比对区块链中赢家的哈希值A与哈希值B,若两者相同则判定未有作弊行为发生,若不相同则判定存在作弊行为。
本发明采用以上技术方案与现有技术相比,具有以下技术效果:本发明考虑到了区块链与游戏现有结合的不足,将应用场景进行改变,利用区块链去信任,去中心化的独特机制来有效查出作弊行为。同时棋牌类小游戏数据并不复杂,运算时不会造成太大负担,导致产生拥堵现象。因此本发明大胆设想基于区块链的独特性质来设计防作弊系统,将牌类游戏中牌的花色和数字作为电子数据存于区块链中,以保证数据的可验证性、不可篡改性和不可伪造性。花色等电子数据一旦存储在系统中,验证者可将其调用与待查证信息进行比对,以证明此待查证数据的真实性和一致性,防止有玩家中途换牌等作弊行为。再利用智能合约技术和以太坊平台,通过API接口接入游戏,从而防止用户更改花色、私自换牌等篡改、伪造电子数据的作弊行为。
此外本发明可以帮助网警撕掉赌博游戏精心伪装的外衣,从而规范网络行为,净化网络环境。
附图说明
图1为本发明方法实施例的流程示意图。
具体实施方式
下面结合附图对本发明的技术方案做进一步的详细说明:
如图1所示,本实施例提出了一种基于区块链智能合约的牌类游戏防作弊方法,包括以下步骤:
步骤一、获取玩家在游戏开始时抽取到的牌的花色和数字信息,每发出一张牌给玩家就将该张牌的花色和数字存储到区块链;
具体为,将游戏开始时各位玩家及其所抽取牌的信息通过API接入本插件。考虑到牌的花色信息需要在客户端以及后端系统之间进行传输,故在本实施例中,借助Socket来实现其之间数据的传输与控制。目前可以使用的Socket有两种方式,流式和数据报式。其中,前者基于TCP传输,后者基于UDP传输。经过比较发现流式Socket能够按序提供稳定的的双向数据流通信服务,适合与本系统需要传输牌面信息和网络之间数据的传输情况,故选择基于TCP的Socket来实现通信。
其中,基于TCP的Socket通信主要分为下述四个基本步骤:
1)服务器端定义ServerSocket对象实例,监听来自客户端的连接请求;
2)在客户端定义Socket对象实例,向指定的服务器发起连接;
3)按照一定协议对Socket进行读/写操作,完成数据的计算和交互;
4)关闭输入流、输出流和双方的Socket。
我们为每局游戏都单独启动一个线程进行通信,传输的数据分为用户信息和牌类花色信息。
步骤二、将发出的每张牌的花色和数字通过编码方法进行编码,并对生成的编码进行移位压缩。
因为牌面信息数据量较大,为了减少系统处理时间和存储空间,需要对数据进行压缩。这里运用了哈弗曼编码和merkle-tree(墨克树)相结合的方法(即图1中的HuffMT)
编码时,从最小概率的两个符号开始,可选其中一个支路为0,另一支路为1。这里,我们选上支路为0,下支路为1。再将已编码的两支路的概率合并,并重新排队。多次重复使用上述方法直至合并概率归一时为止。
假设有n个权值,则构造出的哈夫曼树有n个叶子结点。n个权值分别设为w1、w2、…、wn,则哈夫曼树的构造规则为:
(1)将w1、w2、…,wn看成是有n棵树的森林(每棵树仅有一个结点);
(2)在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
(3)从森林中删除选取的两棵树,并将新树加入森林;
(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
Merkle-tree使用的是单向哈希。哈希树的顶部为顶部哈希(top hash),亦称根哈希(root hash)或主哈希(master hash)。它是通过并联两个子哈希来往树上爬直到找到根哈希。单向哈希可以避免碰撞,而且由于它是确定性算法,因此不会也不可能存在两个一样的文本哈希。
首先将玩家摸到的牌通过这种方法生成编码串,然后过程中每一次出牌也通过这种办法生成编码串。游戏结束后根据牌面花色数字进行排序,生成一个有序编码串。
数据压缩的具体过程为:统计每个字符出现的次数,通过次数构建哈弗曼树,得到每个字符的编码,进行压缩数据。
步骤三、将步骤二中压缩后的编码按花色和数字大小排序,并将排序后的编码通过加密算法生成哈希值A,存入区块链中;
在本实施例中加密算法为MD5算法和SHA256算法的结合。采用MD5和SHA256算法生成hash。因为单一的加密算法可能会产生碰撞,所以选择两种方式共同加密。MD5算法以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
SHA-2算法,名称来自于安全散列算法2(Secure Hash Algorithm 2)的缩写,是一种密码散列函数算法标准,属于SHA算法之一,是SHA-1的后继者。
Java支持MD5和SHA256算法。可以直接编码串通过转换器生成hash,从而完成数据的加密。
步骤四、游戏过程中,玩家每出一次牌就将该牌的花色和数字存储到区块链;
步骤五、将玩家打出的每张牌的花色和数字通过编码方法进行编码,并对生成的编码进行移位压缩;
步骤六、将步骤五中压缩后的编码按花色及数字大小排序,并将排序后的编码通过加密算法生成哈希值B,存入区块链中;
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
通俗地说,区块链是一个收录所有历史交易的总帐,每个区块中包含若干笔交易记录。如果说区块链是账本,那么区块就是账本的每一页。交易的细节都被记录在一个网络里任何人都可以看得到的公开账簿上。区块就是很多交易数据的集合,它被标记上时间戳和之前一个区块的独特标记。有效的区块获得全网络的共识认可以后会被追加到主区块链中。区块链是有包含交易信息的区块从后向前有序链接起来的数据结构。
智能合约(smartcontract)这个术语至少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(NickSzabo)提出来的。他的定义是″一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。″
基于区块链技术的智能合约不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可攥改。同时,由区块链自带的共识算法构建出一套状态机系统,使得智能合约能够高效地运行
基于区块链的智能合约包括事务处理和保存的机制,以及一个完备的状态机,用于接受和处理各种智能合约;并且事务的保存和状态处理都在区块链上完成。事务主要包含需要发送的数据;而事件则是对这些数据的描述信息。事务及事件信息传入智能合约后,合约资源集合中的资源状态会被更新,进而触发智能合约进行状态机判断。如果自动状态机中某个或某几个动作的触发条件满足,则由状态机根据预设信息选择合约动作自动执行。
智能合约系统根据事件描述信息中包含的触发条件,当触发条件满足时,从智能合约自动发出预设的数据资源,以及包括触发条件的事件;整个智能合约系统的核心就在于智能合约以事务和事件的方式经过智能合约模块的处理,出去还是一组事务和事件;智能合约只是一个事务处理模块和状态机构成的系统,它不产生智能合约,也不会修改智能合约;它的存在只是为了让一组复杂的、带有触发条件的数字化承诺能够按照参与者的意志,正确执行。
区块链系统具有公开透明、无法篡改、便于追溯的特点,规避了数据被篡改的威胁可能,而通过可编程易操作的智能合约使得用户能够更方便直接的查看和验证电子数据。
步骤七(该步骤图中未示出)、比对区块链中赢家的哈希值A与哈希值B,若两者相同则判定未有作弊行为发生,若不相同则判定存在作弊行为。
本发明还公开了一种基于区块链的牌类游戏防作弊系统,包括:
发牌信息获取模块、获取玩家在游戏开始时抽取到的牌的花色和数字信息,每发出一张牌给玩家就将该张牌的花色和数字存储到区块链;
发牌编码压缩模块、将发出的每张牌的花色和数字通过编码方法进行编码,并对生成的编码进行移位压缩;
发牌排序存储模块、将发牌编码压缩模块中压缩后的编码按花色和数字大小排序,并将排序后的编码通过加密算法生成哈希值A,存入区块链中;
出牌信息获取模块、游戏过程中,玩家每出一次牌就将该牌的花色和数字存储到区块链;
出牌编码压缩模块、将玩家打出的每张牌的花色和数字通过编码方法进行编码,并对生成的编码进行移位压缩;
出牌排序存储模块、将出牌编码压缩模块中压缩后的编码按花色及数字大小排序,并将排序后的编码通过加密算法生成哈希值存入区块链中;
比较模块、比对区块链中赢家的哈希值A与哈希值B,若两者相同则判定未有作弊行为发生,若不相同则判定存在作弊行为。
本系统是利用solidity语言编写智能合约,通过智能合约来实现与区块链的交互。系统中任何玩家每一步操作都记录在区块链中,是公开透明的,最后通过智能合约将数据下载并自动进行比较来判定是否作弊,实现非第三方判定,去中心化且公平公开。
作为本系统的一种实现方法,可以将其制作成插件,每局游戏开始时调用该插件,在本局游戏结束时,在界面上显示本局游戏有无作弊行为。
本发明考虑到了区块链与游戏现有结合的不足,将应用场景进行改变,利用区块链去信任,去中心化的独特机制来有效查出作弊行为。同时棋牌类小游戏数据并不复杂,运算时不会造成太大负担,导致产生拥堵现象。因此本发明大胆设想基于区块链的独特性质来设计防作弊系统,将牌类游戏中牌的花色和数字作为电子数据存于区块链中,以保证数据的可验证性、不可篡改性和不可伪造性。花色等电子数据一旦存储在系统中,验证者可将其调用与待查证信息进行比对,以证明此待查证数据的真实性和一致性,防止有玩家中途换牌等作弊行为。再利用智能合约技术和以太坊平台,通过API接口接入游戏,从而防止用户更改花色、私自换牌等篡改、伪造电子数据的作弊行为。
此外本发明可以帮助网警撕掉赌博游戏精心伪装的外衣,从而规范网络行为,净化网络环境。
以上所述,仅为本发明中的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可理解想到的变换或替换,都应涵盖在本发明的包含范围之内,因此,本发明的保护范围应该以权利要求书的保护范围为准。