区块链的工作流程主要包括如下步骤。
①发送节点将新的数据记录向全网进行广播。
②接收节点对收到的数据记录信息进行检验,比如记录信息是否合法,通过检验后,数据记录将被纳入一个区块中。
③ 全网所有接收节点对区块执行共识算法(工作量证明、权益证明等。
④区块通过共识算法过程后被正式纳入区块链中存储,全网节点均表示接受该区块,而表示接受的方法,就是将该区块的随机散列值视为最新的区块散列值,新区块的制造将以该区块链为基础进行延长。
节点始终都将最长的区块链视为正确的链,并持续以此为基础验证和延长它。如果有两个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上将存在先后差别,它们将在先收到的区块基础上进行工作,但也会保留另外一个链条,以防后者变成长的链条。该僵局的打破需要共识算法的进一步运行,当其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营,开始在较长的链条上工作。以上就是防止区块链分叉的整个过程。
所谓“新的数据记录广播”,实际上不需要抵达全部的节点。只要数据记录信息能够抵达足够多的节点,那么将很快地被整合进一个区块中。而区块的广播对被丢弃的信息是具有容错能力的。如果一个节点没有收到某特定区块,那么该节点将会发现自己缺失了某个区块,也就可以提出自己下载该区块的请求。
现在我们都知道了区块链网络里的记账者是节点,节点负责把数据记录记到数据区块里,为了鼓励节点记账,系统会按照规则随机地对记账的节点进行奖励。那么如何保证不会有人制造假数据记录或者说如何保证造假数据记录不被通过验证?这就涉及时间戳。这也正是区块链与众不同的地方。区块链不仅关注数据区块里的内容,也关注数据区块本身,把数据区块的内容与数据区块本身通过时间戳联系起来。时间戳为什么会出现?这是由区块链的性质规定的。节点把数据记入了区块,因此一个区块就相当于一页账簿,每笔数据在账簿中的记录可以自动按时间先后排列,那么账簿的页与页怎么衔接起来?也就是说,这一个区块与下一个区块的继承关系如何断定就成为问题。于是时间戳就出现了。
时间