区块链是由一个个相连的区块(block)组成。区块很像数据库的记录,每次写入数据,就是创建一个区块。
每个区块包含两个部分:
区块头(Head):记录当前区块的元信息
区块头包含了当前区块的多项元信息
? Hash 就是计算机可以对任意内容,计算出一个长度相同的特征值。区块链的 Hash 长度是256位,不管原始内容是什么,最后都会计算出一个256位的二进制数字。而且可以保证,只要原始内容不同,对应的 Hash 一定是不同的。
区块体(Body):存储和承载区块链上的各种实际数据
如下图所示,区块链的链式存储形式:
在区块链上的所有的各种操作和相关的数据,都以交易的形式保存下来;最终在区块不可逆的时候会落地存储到磁盘上,如下图所示:
如果节点间的区块不一致,先通过区块同步到相同的不可逆区块,然后,按照区块的序号和其上承载的交易的顺序在节点上将交易进行重新执行,一直到所有的不可逆区块执行完毕,这个时候,节点的状态记录能够与其他节点的状态达到一致。如下图所示:最左侧与最右侧的节点通过重播交易到达与其他节点的状态一致。
区块与 Hash 是一一对应的,每个区块的 Hash 都是针对”区块头”(Head)计算的。
区块头包含很多内容(包括上一个区块的Hash、当前区块体的Hash等)。这表示,如果当前区块的内容变了,或者上一个区块的 Hash 变了,一定会引起当前区块的 Hash 改变。
假设有人修改了一个区块,那么该区块的 Hash 就变了。为了让后面的区块还能连到它,必须同时修改后面所有的区块,否则被改掉的区块就会脱离区块链。而Hash 的计算本身较为耗时,同时修改多个区块几乎不可能发生,除非有人掌握了全网51%以上的计算能力,而这种情况是几乎不可能发生的。
原文:https://blog.51cto.com/14267585/2411920