您的位置:首页 > 大数据 > 人工智能

简单理解链表与区块链(blockchain)

2018-03-05 14:11 405 查看
  “区块链”类似于c语言里的链表,其中“区块”相当于链表中的Node节点,Node节点之间相互串联形成“链”。



                                                                            链表的概念(如图)
  换一种“实现”方式,每个石柱保存下一个石柱的经纬坐标,进而可以准确找到下一个节点。



  现实中的“链表”是用铁链拴住的一根一根的石柱,而在C语言中,石柱被替换成了一个struct结构体,两个石柱之间的铁链被替换成了内存指针。



  每个Node的节点包含一个保存下一个Node节点的指针域(即一个指针变量,假设为next),next保存下一个Node节点在内存中的地址,这样,计算机程序可以从第一个节点开始,依次找到后面所有处于链表中的节点,并访问每个节点中保存的数据(data段)内容。

   区块链中,除了创世区块(区块即Node节点,创世区块是整个区块链上的第一个区块)外,每个区块都是根据其所在链中的上一个区块的头部Hash值生成的。 隐含的意思是说,我是上一个区块的孩子,我必须遗传来自父母的一部分基因,没有上一区块就没有我(不然我就会无家可归,挂载不到整条链上)。这个血缘关系就是上下区块之间的纽带,无须怀疑其真实性(可以通过Hash值进行验证),且子区块可以根据自身遗传基因(父区块的Hash值)向前遍历。 简单地将,就是用Hash值代替了内存指针。
  一条区块链一般可以由世界各地的计算机设备共同维护,每台设备可以有完整的拷贝,但正常情况下,每台设备所拥有的最新的区块链拷贝应该是相同的。就像天上有一只月亮,每台计算机都采集显示它的缩影,月亮是唯一的,所以每台计算机看到的月亮缩影应该都是相同的。
  区块链是去中心化的,它由很多同等地位的运维工程师(客户端)共同维护运转。每当有一个新区块(新孩子出生)被孵化出来,且即将要加入到区块链中时,孵化师(客户端)会向其他人发布广播,让大家一起见证新生命的诞生。所有人会亲自验证新生婴儿的血脉,如果新生儿确实是上一区块的孩子(Hash验证),那么便承认它的身份,让它加入到区块链中。这样,大家对结果达成共识,那么区块链数据便能达到唯一性。当然,技术实现中,共识机制并不是这么简单实现的。
  另外,每个区块生成并挂载到区块链上后(从大家都验证并承认它的身份后开始),它的数据不能再做任何改变。
刚才说过,孩子的出生是依靠父母基因的。每个区块的基因都是特定的,由整个区块的数据内容Hash而成,如果数据内容改变,其自身的Hash值就会(必须)发生改变。那么不管是当前区块的孩子们,还是所有的孵化师们,都不会同意的。
  想想小说中的故事,有两个非常强大的人物在打架,其中一个人打不过对手,趁对方不注意,通过时光隧道回到了过去,杀掉了对手的爷爷...

  剧情虽然夸张,但历史不允许被修改的道理确是大家所共知的。强行改变区块链中的父节点,相当于把该父节点后面的所有子节点统统舍弃,重新添加,导致该节点之后所有计算出子区块的客户端的努力都白费了,劳作既是代价,也是金钱。
  比特币是一个和区块链紧密相关的产物,想要理解区块链,总是不自觉得往比特币上面去靠。我思来想去,是因为比特币中蕴含着的利益博弈,是理解区块链在人心驱动下的精髓,也是区块链价值的核心所在。区块链唯一的信仰,就是每个人(客户端)都会牟取自己的利益。支持对自己有利的行为,反对对自己有害的行为,监督其他人的不合规矩的行为(一般都不符合自己的利益)。它(比特币规则)坚信这一点,并以此为核心,形成的一系列附加规则,通过人与人之间相互制约,监督,建立起一套完整的货币体系。
  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  区块链