第一部分
年终,币圈降温后,有一个领域却在不断升温,就是区块链游戏,尤其是基于EOS/ETH平台的博彩类游戏越来越热。
为什么大家对区块链的落地应用都在质疑的时候,博彩成了一个成功的应用案例?
我在很早时间写过一篇文章,最适合区块链的应用场景是“多对手之间的直接交易”,恰恰符合博彩的玩法。
第二部分
博彩类游戏的精髓,无论是什么形式,都要给玩家提供一个公开、公平的规则,让玩家觉得:每个人的输赢的概率都是一样的,输赢的结果只是每个人运气不同。
从技术层面实现这样的规则,最简单也是最合理的做法就是:随机数。
随机数在我们日常生活中经常遇到,特别是体彩开奖、比赛抽签出场顺序等,这些其实都是在使用随机数。
这种大型的社会活动都会有公证员现场公证,即便如此,还是有很多人对结果质疑,毕竟历史上出现过开奖或抽签造假的行为。
也就是,产生随机数的过程或者方法不可靠的话,结果当然也是不可靠的。
产生随机数的过程和方法,我们统称为“随机源”,一个优秀的随机源,应该基本以下即便特征:
1)均匀的随机性(也就是各种结果出现的概率是接近的)
2)任何一方都无法提前预测结果;
3)各方看到的随机数结果是相同的。
第三部分
下面我们介绍几种常见的随机源,并分析它们的优缺点:
1、抛硬币、掷骰子
优点:简单、便于理解、成本低;
缺点:不能远程操作;效率太低;必须信任操作者。
2、自然现象,比如太阳黑子活动、天气变化、宇宙辐射等
优点:随机性强,公众可检测
缺点:有些数据比较缓慢,有些数据检测需要专业设备和操作人员。
3、金融数据,比如股市的指数变化等
优点:很好的随机性,恶意操纵成本高
缺点:有些数据比较缓慢,可能存在内部作弊者
优点:简单,快速,无成本
缺点:假随机
我们大部分的博彩游戏,用的都是编程语言中的随机函数,但是有点编程经验的人都知道,随机函数是“伪随机数”。
伪随机数是用确定性的算法计算出来自[0,1]均匀分布的随机数序列。并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。
计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。
只要用户或第三方不设置随机种子,那么在默认情况下随机种子来自系统时钟。
结论就是:
计算机中的随机函数是按照一定算法模拟产生的,其结果是确定的,是可预见的。
伪随机数其实是有规律的,只不过这个规律周期比较长,但还是可以预测的。经过足够多次的运行,结果会出现重复。
听起来很恐怖对不对?
这是一个真随机数的可视化图像:
这是windows平台下php语言的随机函数的可视化图像:
很明显的可以看到,伪随机数的图像呈现出了某种规律。
回到我们这篇文章的主题,大部分EOS/ETH平台上的博彩游戏,都是基于编程语言的伪随机数为基础的,也就是博彩的结果会呈现出一种规律性,如果这种规律性被黑客发现,所有玩家包括庄家都会被洗劫一空。
这就是这些博彩游戏的死穴。
其实博彩游戏的庄家早就知道伪随机数的风险,如何应对呢?
看看目前热门的“爆点游戏”是怎么处理的?
它们没有用伪随机函数,而是提前生成,但是这样的话,庄家就知道每一轮的数据,所有玩家都在跟庄家对赌。
这种博彩游戏还能玩吗?
第四部分
下面谈的是,区块链其实是一种非常好的随机源。
区块链挖矿的功能,就是各个矿工在寻找随机数的过程。虽然每一台矿工的计算也用到了伪随机函数,但是每次挖矿成功的矿机不同,它们之间的随机种子和计算方法是不同的。
我们将每一个区块(挖矿成功后)的hash值进行抽取后,形成一种“区块链随机源”:
优点:
完整意义上的去中心化随机源;
固定时间输出;(出块周期)
可以使用多个块来提高安全性;
公链被操作的可能性小或成本高。
缺点:
效率不高
时间不够精确
有些链(如BTC)需要预防分叉风险
我们在北斗链上做了一个随机数生成器,用于演示:
http://explorer.beidouchain.com/rand
(点击左下阅读原文链接)
后期我们将对公众提供随机数的商业接口。