在某个节点被当作区块链网络的一部分之前,它必须要完成以下的要求:
区块链节点的类型和它们在区块链系统内不同方面的参与情况如下图所示:
但要注意,表中列出的情况不是绝对的。例如在比特币中,miner nodes 就参与了交易的生成过程。
Full Node (全节点):
在本地保留区块链账本的完整记录,在不参考外部任何节点的情况下参与交易验证过程。且需要参与信息的路由过程,区块链中,当某个节点想与其他节点(不是他的相邻节点)对话时,就需要进行路由。
Lightweight Blockchain Nodes (轻节点):
只保留每个区块头,然后在需要完整信息时参考外部节点,它也会参与路由。
Miner Nodes (矿工):
参与区块链的共识(consensus)机制,并负责区块链的出块过程。它是区块链中的最高级别节点,可以改变一个区块链网络的状态,或者说,它负责保证整个区块链网络的正常运转。
所谓的出块是指,参与共识机制的节点每次都会“投票”,按照不同的投票规则选出一个节点,本轮这个节点就可以创建一个区块,其它所有节点也会同步更新。
根据交易的执行,我们还可以将节点分为
或者
区块链系统可以被分为六层:
应用层直接与使用者进行交互。在这一层,不同的应用程序在客户端上运行,客户端使用应用程序与区块链系统交互。
这一层负责虚拟化和智能合约的相关执行,它也与用户机器互动,负责编译区块链代码。
共识层负责管理和达成 P2P 网络中的共识。它规定了需要执行哪种共识协议以及如何遵循规则来实现共识。
这一层是负责管理区块链网络的底层网络服务和操作的核心层,通信机制、路由以及 P2P 网络都有该层来进行管理。
该层涉及到包括散列(哈希)、数据存储加密算法、数据排序、侧链以及分片等任务。它还包括对交易模型以及 Merkle Tree 的管理问题。
Merkle Tree(梅克尔树)是区块链的基本组成部分,它是一个代表区块中所有交易的二进制树, 其作用是快速归纳和校验区块数据的存在性和完整性,使得区块头只需包含根哈希值而不必封装所有底层数据。
基于上面的讨论,我们将一个区块链的完整工作流程总结如下: