上次整理了一些关于区块链的中经常看到的一些概念,关于什么是侧链、预言机(Oracle)、分片的一些简单概念。
当然,整理的内容并不是太全、太细,关于这些概念性的理解对于绝大多数人来讲,还是有晦涩难懂的,特别是一些涉及到的专业词语很多人并不是太了解,很多内容我也在学习,也希望能和大家一起学习区块链。
这次整理了一下DAG、拜占庭将军的概念:
1、DAG
关于DAG这个词,很多人都会想到一个项目IOTA,这个关于物联网的项目也引爆了很多人的关注,尤其是看到90后小伙在几年前就已经布局该项目,在2017年直接资产过亿,吸引了无数人的眼球。
很多人都知道,在2017年11-12月期间,比特币的转账费用奇高无比,如果不进行加速的话,一个礼拜都未必能够收到。时间再往前推,那就是关于比特币扩容之争,无论是Core团队、还是矿工,无论是Segwit、还是2x,无论是香港共识、还是纽约共识,我们都暂且不论谁对谁错,科技的发展日新月异,我始终认为,只有在各种争论中,好的技术、好的产品才能蓬勃发展,没有泡沫,各路豪杰怎么吹,有点扯远了。。。
比特币底层所用的区块链技术是采用的区块+链式的数据结构,而在这些个链条中谁是“最长链”谁就具有发言权,从而就认可这条“最长链”中的区块内容是真实、可靠的。比特币10分钟1个区块,1个区块1M大小,每分钟144比交易,在全球这么多人都在进行比特币转账的时候,这个效率就可想而知了。
DAG的中文就是有向无环图,有别于传统区块链,DAG所采用的是最重链共识,在传统区块链设计上,新单元的发布会加入在原先的最长链之上,并且所有节点认为最长链为真,依次无限蔓延。
而DAG中,每个新加入的单元,不仅仅只加入长链里的一个区块,而是加入到之前的所有区块。假设当你发布新交易时,前面有两个有效区块,那么你的区块会主动同时链接到前面两个之中,DAG 中的每个新单元,验证并确认其父辈单元,父辈单元的父辈单元,慢慢可达创世单元,并将其父辈单元的哈希包含到自己的单元里面。随着时间递增,所有交易的区块链相互连接,形成图状结构,如若要更改数据,那就不仅仅是几个区块的问题了,而是整个区块图的数据更改。DAG 这个模式相比来说,要进行的复杂度更高,更难以被更改。
当然了,DAG还有很多内容和技术细节,这里我们就不过多深究,如果想要了解的话,还是需要多用百度、谷歌自行去研究,也可以看看IOTA、Byteball、国内的如Nerthus等项目的白皮书,这些项目都采用DAG相关的技术。
2、拜占庭将军问题
拜占庭将军问题是图灵奖得主微软研究院首席研究员、美国国家工程院和科学院院士的莱斯利·兰伯特提出的点对点通信中用来为描述分布式系统一致性问题。
其中有一个例子非常形象:拜占庭时期,罗马帝国国土辽阔,为了防御目的,因此每个军队都分隔很远,将军与将军之间只能靠信差传消息。拜占庭帝国想要进攻一个强大的敌人,为此派出了9支军队去包围这个敌人。假设有9位将军投票,其中1名叛徒。8名忠诚的将军中出现了4人投进攻,4人投撤离的情况。这时候叛徒可能故意给4名投进攻的将领送信表示投票进攻,而给4名投撤离的将领送信表示投撤离。这样一来在4名投进攻的将领看来,投票结果是5人投进攻,从而发起进攻;而在4名投撤离的将军看来则是5人投撤离。这样各支军队的一致协同就遭到了破坏。
在进行共识时,结果并不代表大多数人的意见。这时,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,拜占庭问题就此形成。
那如何解决这个问题呢?
中本聪同学通过引入我们经常听到的一个词“POW-Proof of Work”(工作量证明)这个共识来解决这个问题,我们可以反过来理解这个词“证明工作量”就好理解了。
在来看拜占庭将军问题,如果所有的将军同时发送消息,那势必会出现混乱,到底听谁的?中本聪同学在个系统加入了发送信息的成本:一段时间内只有一个节点可以传播信息。而这个“成本”就是前面提到的“工作量”,这个工作量表示节点必须完成一个计算工作才能向其他将军传播消息,谁第一个完成工作,谁才能传播消息。
而当其中一个节点发出消息后,其他节点收到发送者的消息必须签名盖章,确认各自的身份。而这里就是中本聪通过加密技术为这个信息进行签名。
而为了验证谁才是第一个发送消息的将军,中本聪同学又引入了“时间戳”的概念,在区块链中,说白了就是通过时间戳来验证节点的出块时间,套用到拜占庭将军问题上,那就这些将军在完成某个工作后所发的消息上改一个时间印章。
总结一句话就是:拜占庭容错问题需要解决的是谁来发起信息,如何实现信息的统一同步的问题。
当然了,拜占庭将军问题,里面还有拜占庭容错、哈希算法、各种数学公式等等复杂的概念,这里不做探究,只是简单的让大家了解而已,详细的资料,还是那句话,多用百度、谷歌。