摘要
2017-2018年,互联网界最火热的话题之一就是区块链。各大公司相继宣布对区块链方面的投资和开发,各大互联网公司也前后推出自己区块链产品,例如阿里的麻吉宝、百度的莱次狗、腾讯的TrustSQL等等。那么区块链到底是什么?本文简单介绍区块链的相关概念
区块链的相关概念
区块链本身字面的理解就是在一个网络中,有很多很多的区块(block),通过某些方法使这些区块串起来,形成一个长链(chain),这就叫区块链(blockchain)。
有人说区块链技术的发展必然会对我们的日常生活产生重要的改变,为什么这么说,我们先来看看区块链中最重要的几个概念
1.是一个分布式账本(或者分布式数据库)
2.是一个去中心化的信任系统
3.区块链技术最著名的应用——比特币
去中心化的含义
从上面的前两天概念总结来说,区块链是一个去中心化的分布式账本。去中心化的意思就是网络中的节点与节点之间相互信任,去除了常见分布式系统中的中心系统的概念。
举个例子,我这里写一个斗地主的故事,商务男、小孩、老爷爷三个人在一起斗地主,他们规定地主赢了得10块钱,农民赢了得5块钱。为了避免赖账,他们约定没人拿出100块钱,存放在圣诞老人那里,圣诞老人负责记账。
那么在圣诞老人手里面的账本是这样的
|
斗地主总账 |
商务男 |
100 |
小孩 |
100 |
老爷爷 |
100 |
那么此时,圣诞老人是他们三个人的信任中心,每次打完牌都把结果告诉圣诞老人,圣诞老人负责记账。例如第一局比赛,商务男是地主并赢得了这场比赛。那么圣诞老人手里的账单就需要发生变化
|
斗地主账单 |
商务男 |
110 |
小孩 |
95 |
老爷爷 |
95 |
那么这种场景是我们日常生活当中最常见的,我们潜移默化地接受这中有中心化的交易和操作。以上的场景就是典型的具有中心化的交易。那么在日常的中心化交易中是否会出现问题?
我们设想,圣诞老人作为商务男、小孩、老爷爷的中心,如果出现下列问题,三者之间的账单应该如果处理?
问题:
1.圣诞老人年事已高,要是突然挂了怎么办?
2.圣诞老人坐地起价,要求每人收一定的手续费怎么办?
3.圣诞老人拥有商务男、小孩、老爷爷三人的私有数据,如果他把这些数据卖给别人怎么办?
4.如果圣诞老人开了一个很大的赌场,参与斗地主活动的有成千上万个人,圣诞老人负责记账,忙不过来怎么办?
参与斗地主的每个人都与中心(圣诞老人)进行交互,数据的流向是向中心节点汇集,中心化必然就会产生寡头,产生垄断。如果采用去中心化的数据流,人与人(节点与节点)间都是平等互联的,节点与节点之间使用公共的标准进行数据流通。
分布式系统
拜占庭将军问题
在区块链的学习当中,要理解分布式系统问题,大部分的学者都会举出拜占庭将军的问题。故事大致是这样的:古代希腊有一个国家叫拜占庭,国力雄厚,拜占庭中的一位将军喜欢征战,想把别的国家的资源抢夺到自己手中。在攻打敌方国家的时候,将军派出了10支部队同时去攻打。当然敌对国也不是吃素的,在拜占庭将军排除的10支部队中,需要有6支或者以上的部队同时发起进攻,才能取得胜利。那么这个问题就属于一个典型的分布式的问题,在这个分布式系统中有10个节点,我们希望这10个节点同步,一起在同一时间执行同一个操作。也就是说拜占庭将军希望这10支部队在同一时间攻打敌方国家。但是在将军发出一起攻打的命令时,通讯兵有可能会被敌军俘获,或者通讯兵表达能力欠缺,有可能把将军的命令表达错误。这些问题可能导致通讯兵传递出去的数据时错误的,那么这10支部队肯定保持不了同步,攻打的结果极有可能是失败。所以这就是拜占庭将军的问题所在。
分布式系统存在的一些问题——谁说了算,听谁的?
在分布式系统中存在着一些问题,相信做过Java的同学很有体会,往往在分布式系统的实现中,有一个很非常重要的问题,那就是谁说了算?听谁的?如果才能保持数据一致?典型的例子就是我们在实zookeeper集群时,在该分布式系统当中选举出一个领导,在该网络内所有的分支都听这个领导的。如果在该网络中这个领导挂掉了,zookeeper会在剩下的分支当中,再选举一个分支作为新的领导,但是zookeeper在实际的生产环境中,也存在一些问题,就是如果第一个领导挂掉的时候,并没有彻底死亡,有一部分还存活着,但是新的领导分支已经选定,那么此时存在两个领导。那么两个master手下的分支就会出现我们所说的“脑裂”问题,它们不知道到底该听第一个领导的还是第二个领导的。其实zookeeper是属于一种中心化的分布式实现。
最典型的区块链应用——比特币
要继续讲解区块链的问题,我们需要结合区块链中最典型的实现,那就是我们讨论最多的比特币。关于比特币,我先给大家一些比特币的相关概念
1.比特币不是一种货币,它是一个分布式的总账系统,电子总账在每个参与者的电脑上备份,实时地同步和对账
2.总账记录一定量的比特币从一个参与者到另一个参与者的过程,每次记录都会广播到网络中
3.比特币本身没有价值,比特币的价值在于,它是通过一些算法,实现了一个去中心化的分布式信任系统,这个系统实现了价值转移
工作证明(POW)机制
介绍了比特币的基础概念之后,我们回到上面所说的常见分布式系统中所说的谁说了算,听谁的的问题。那么区块链中如果解决这个问题的呢?在区块链技术中,它通过一个叫工作证明(POW)的机制来解决区块链的数据信任问题。那么如何理解工作证明这个机制呢?我先给出两句话大家看看:获取这个证明需要很长时间,而验证它的真伪只需要很短的时间。
工作证明我们现实生活当中也存在着很多例子,比如说,我们学生的学历有本科-硕士-博士-博士后等等,我们完成本科学习需要4年时间,然后才有资格考取硕士,再花3年时间完成硕士的学习,然后再才有资格考取博士,再4年时间完成博士的学习。整个过程都是一个链式的推进过程。完成各个阶段的学习就是我们获取证明的工作,但是我们去找工作,用人单位要验证你是否有这些学历,只需要去学信网上花很短的时间就能验证你是否有这些资历。所以验证真伪只需要花很短的时间。
比特币就是通过上面所说的工作证明的方式,它降低了信息传递的速率(就是说你在传递信息之前有要先对你进行工作证明),增加了节点成为领导的难度,通过区块链的短暂分叉,完美地解决了拜占庭将军问题。
我们回到之前商务男、小孩、老爷爷斗地主的场景中,圣诞老人这个中心已经不存在了,我们把参与斗地主的三人还有其他的一群吃瓜群众都放入区块链的网络中,每个人是一个节点,那么吃瓜群众就是负责记账的矿工。那么在区块链的环境下,故事就应该是这样的:三人完成一把斗地主,最终的结果是商务男作为地主被农民打败了,商务男输了10块钱,他应该给小孩和老爷爷每人5块钱,在区块链中,如果产生了交易信息,就要在全网内广播。在此规则下,商务男应该向两个人转账并全网广播一条信息:“我斗地主输了,我向小孩和老爷爷每人转5块钱”。
但是如果商务男没有在全网内广播这条消息,他只是点对点地分别对小孩和老爷爷说:“我给你转了5块钱,你同步到你的账本上吧。”那么商务男就伪造了两条信息分别发给了小孩和老爷爷。
此时小孩和老爷爷的账本如下:
|
斗地主账本 |
商务男 |
90 |
小孩 |
105 |
老爷爷 |
105 |
但是该网络中其他的吃瓜群众的账本是这样的
|
斗地主账本 |
商务男 |
100 |
小孩 |
100 |
老爷爷 |
100 |
小孩和老爷爷也是该网络中的两个节点,他们收到了来自商务男和其他吃瓜群众两份不同的账本,在该分布式账本中就出现了数据不一致的现象。那么小孩和老爷爷到底该听谁的呢?此时故事还要继续下去,商务男说,我是本科毕业,我的学历高,应该听我的,但是吃瓜群众中就有人不乐意了,他说,我也是是本科生呀,我的账本才是正确的。此时如果商务男还想圆他说的谎,那么他就必须继续进行工作证明。于是他考取了硕士,他说我是硕士,我的账本才是正确的,但是吃瓜群众当然有会有人考取了硕士,此时又会出现谁也不服谁的情况。接着商务男又考到了博士,他再次声明他的账本是对的,但是吃瓜群众千千万,当然也有博士毕业的,此时又出现了听谁的问题,如此一步一步商务男和吃瓜群众双方为了夺得话语权,继续增加他们各自的工作证明。但是所谓双拳难第四手,在吃瓜群众中总会有学历比商务男学历出色的人,所以,商务男最终的工作证明(POW)肯定会不如吃瓜群众中的最高学历份子。此时商务男的谎言就不攻自破了。这个故事也就是说当全网中有一个节点试图去非法篡改网络中的数据,它需要和全网的所有节点进行竞争。他可能在第1、2、3、4、5个次工作证明中胜出,但是它绝对不可能在第6次工作证明中胜出。那么在区块链中,它规定当有6个区块确认之后,这条数据就是有效的。
其实如果有同学炒过比特币,或者在火币网上上进行过交易的话,会经常看到一句话,如果一次交易有6个区块确认过,那么你的这次交易就是有效的。为什么是6个区块确认过后就认为是有效的呢?那么在比特币的白皮书中有说道,如果一个节点它要连续6次的工作证明超过全网其他节点,那么他在第6次的算力需要达到全网的百分之五十一。也就是说第6次竞争的时候,他的算力要达到全世界计算机算力的百分之五十一,才有可能连续6次领先其他所有的节点。
比特币总结
通过我们上面对比特币的了解,我们可以总结一下知识点
1.比特币通过p2p来实现账本的同步拷贝,每一个节点都可以接受其他节点广播过来的数据
2.比特币通过增加发送信息的成本,也就是说增加节点的工作证明(POW),降低信息传播的速率
3.比特币通过区块链的长度,来判断数据的可信度(我们在区块链中,永远只相信最长量)
4.区块链中有6个有效区块认为转账成功,那么此次交易就成功。所以比特币的交易确认需要1个小时(每10分钟产生一个区块)
5.比特币的工作证明是通过sha256算法哈希来完成
6.工作证明(POW)的获取需要很长时间,但是验证真伪只需要很短的时间
7.比特币的sha256哈希算法导致大家通过通过矿池来挖矿,矿池有算力垄断,有潜在的中心话风险
8.矿池挖矿只是在争夺记账权,获得比特币,它会消耗大量的电力,并无实际价值,在我国,正取缔挖矿