打印本文 打印本文  关闭窗口 关闭窗口  
六百多年前的区块链项目:麻将
时间:2018-3-31 11:16:40

今天文章的开头我们先不聊区块链,先聊聊民间最受大众喜爱的娱乐项目——麻将。

麻将起源于中国,原属皇家和王公贵胄的游戏,其历史可以追溯到三四千年以前。在长期的历史演变过程中,麻将也逐步从宫廷流传到了民间。

关于麻将的起源说法不一,其中最有趣的莫过于“水浒麻将”。

传说万秉迢生于明朝,此人甚爱《水浒》,被梁山上的108位好汉深深折服,于是便想做一副娱乐工具来纪念他们。

经过几天精心设计,终于研制出了麻将牌。他把麻将牌设计为108张,暗喻《水浒》中的108位好汉。例如九索就是“九纹龙”史进,二索就是“双鞭”呼延灼...等等。

这108位好汉,因分别来自四面八方,于是牌中有东、南、西、北各四张。而梁山泊聚义的群雄有贫有富,出身各异,因此又设中、发、白。发者是发财之家,白者是白丁、贫民,中者是中产人家。麻将又分万、筒(北方称饼)、索(北方称条),即是发明万秉(饼)迢(条)的谐音。

从此,麻将也就诞生了!

之所以要从麻将的起源说起,是因为麻将就是中国最早的区块链落地应用!今天我们就来说说麻将关于区块链那些事。

01 “麻将白皮书”

周末到了,张三准备约上几个好友出来打麻将,于是就打电话约了李四、王五、赵六组了个麻将局。

而张三想打麻将的想法就相当于创建一个区块,而他再以打电话点对点的形式通知了李四、王五、赵六这个动作就做到了“去中心化”的点对点传输。

于是张三、李四、王五、赵六就形成了共识,坐到了一起开始打麻将。四个人会分别摸13张随机分配的麻将,通过摸一张打一张的形式来将麻将规范化的排序来和牌。而这里面摸打的动作就可以理解为“挖矿”,四个人就是“矿工”,108张麻将就是哈希值。而胡牌就是碰撞出了正确的哈希值,就可以获得相应的筹码奖励,也就是所谓的比特币。

那么问题来了,为什么其他三个人都会主动给和牌的人奖励呢?那是因为这三个人都自动达成了共识,这人确实赢了,大家都记录了这笔账,想抵赖是不行的,不然以后传出去这人品不行,就没人再和他一起打麻将了,毕竟圈子很重要。

同时,在大家达成共识时,我们看不到任何中介或者第三方出来评判谁赢了,大家给赢得人的奖励也不需要通过第三方转交给他,都是直接点对点交易,这一过程就是去中心化。

四个人(矿工)各自记录了第一局的战绩,王五大胡自摸七小对,赵六杠了张三的幺鸡,记录完成后就生成了一个完整的区块,但要记住,这才只是第一局,在整个区块链上,这才仅仅是一个节点,如果那天一共打了20盘麻将,也就是20个节点(区块),20个区块连接在一起就形成了一个完整账本,这就是区块链。

因为这个账本每人都有一个,所以就是分布式账本,目的就是为了防止有人篡改记录,打到最后,谁输谁赢一目了然。

整个过程,将区块链技术体现得淋漓尽致。

02 什么是哈希值?

上面我们说到了和牌就是凑出了正确的哈希值,那哈希值是什么呢?

会打麻将的人都知道,第一首摸起来的13张牌是随机分配的,杂乱无章,毫无规律,所以打麻将的人需要把这13张麻将凑成规律的牌就赢了,也就是俗称的“和牌”。

那么实际上在区块链里,比特币挖矿也是一个道理,比特币“矿机”就是运算特定的哈希值,谁先算出来,谁就赢得一个比特币的奖励。

也就是说哈希值是文件的身份证,不过比身份证还严格。他是根据文件大小,时间,类型,创作着,机器等计算出来的,很容易就会发生变化,谁也不能预料下一个号码是多少,也没有更改他的软件。

哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的。

如果上述的概念太过于抽象,笔者就给大家举个简单的例子:

互联网上的每一张图片都具有其特定的哈希值,就是这张图片在互联网时间的编号。比如将一张图片进行映射,会获得一个全宇宙独一无二的哈希值如:5088698dc898f8e5c86ef0a8948b68e02c6c1c6e

这个哈希值,就是这张图片在互联网时间的编号。

那互联网中的信息接近无穷大,哈希值真的够用吗?答案是肯定的,而且过剩。哈希值的数量达到2的80次方个以上,这个数量超过宇宙中所有原子的总和。

那哈希值是如何得出来的呢?

哈希值其实上是数学里的一种散列函数,上中学时我们都学过函数知识,举个简单的例子(+1)就是一种简单的函数计算公式。

给到任意一个数字都可以算出最终结果,例如给出1,运行这个计算公式则是:1+1=2。如果给出100运行这个计算公式则是:100+1=101。

而在哈希算法里,拥有一个复杂的函数计算,每一个东西映射后都会产生一串独一无二的哈希值用于加密。

而哈希值除了加密性之外,还有两个特性:

1、不可倒推。也就是说,你可以把一个图片映射成哈希值,却没办法通过哈希值去倒推它之前是什么图片,甚至连之前是不是图片都无从得知。这就是区块链技术不可篡改的底层逻辑。

2、速度极快,哈希一部20G高清电影,只需0.1秒即可得出结果。

简单综合两点特性来说就是能用极快的速度给你的文件编出不重复的号码,而且任何人都无法通过这个号码推算出文件原来的样子,什么意思呢?

刚才我们说了,运行(+1)的这个函数计算公式,给出任何数字都会得出一个值,例如给出数字1就会得到结果:2。因为这个函数是个最简单的函数,所以通过结果2我们也可以推算出初始给出的数值是1。但在哈希算法里,因函数过于复杂,通过运算得出哈希值后,很难推算出原始数据给出的数值。

例如1的平方=1,但-1的平方也=1。所以不同的值通过同一重算法可能会获得到相同的结果。就像1+4=5和2+3=5一样,你现在知道我的结果是5,能知道我输入的什么数字吗?所以有结果不一定能推测到原始值。

加之,哈希值本身是一串复杂的数字,加大了反推原数值的难度。例如,数字“2”的哈希值为“c81e728d9d4c2f636f067f89cc14862c”

不仅如此数据上小小的改动也会使得哈希值大变样:

“22222”的哈希值为“3d2172418ce305c7d16d4b05597c6a59”

“22221”的哈希值为“ 5a518783270523848f247fb126ac22fa”

所以说,哈希算法具有很强的加密性,很难通过哈希值反推出原始数据的值。这就是为什么区块链具有很强的加密性,例如甲给乙转了一个比特币,全网都会知道这个比特币的交易信息,却不知道谁和谁交易了这个比特币。

但也有人说可以通过“暴力”的方式破解哈希算法,一个一个的试,直到算出正确的结果为止。

但很大程度上这种说法是不可行的,为什么呢?

比如,如果一样东西你知道在哪里,还算不算丢了。

答案肯定是“不算”。

那就说明你的东西没有丢。

散列算法也一样,好比在那个无边无际的海底,有无数沉船,但只要打捞成本远远高于货物价值,那么这些沉船就会一直呆在那。