
区块链技术的必要元素数据层、网络层、共识层 、数据层(Data Layer)相当于区块链四大核心技术中的数据结构,即“区块+链”的结构。
也有另一说,区块链包括主要的六大层级,如下:
区块链技术的必要元素数据层、网络层、共识层

区块链技术的拓展元素激励层、合约层、 应用层

一般把数据层和网络层归类为区块链中的协议层,合约层和激励层归为扩展层,即共识层。
1.数据层
数据层(Data Layer)相当于区块链四大核心技术中的数据结构,即“区块+链”的结构。从还没有记录交易信息的创世区块起,直到现在仍一直在新添加的区块,构成的链式结构,里面包含了哈希值、随机数、认证交易的时间戳、交易信息数据、公钥和私钥等,是整个区块链技术中最底层的数据结构。
区块链作为一个分布式系统用于解决特定场景的一些问题,从本质来看,区块链是一个“状态机”。从技术角度来看,状态是指一个事物在某一特定的时间点所保存的信息。状态机是指记录某一时刻事物所处状态的机器或设备。给定某些输入,状态机的状态可能会发生改变,同时状态机会对这些发生改变的状态提供相应的输出,对于区块链这种状态机来说,这些输出可以看作是不可改变的。
比特币系统、以太坊和超级账本在区块链数据结构、数据模型和数据存储方面各有特色。在数据模型的设计上,比特币系统采用了基于交易的模型,每笔交易由表明花费来源的输入和表明花费去向的输出组成,所有交易通过输入与输出链接在一起,因此每一笔交易都可追溯。以太坊与超级账本需要支持功能更为丰富的通用应用,因此采用了基于账户的模型,可基于账户快速查询当前余额或应用状态。
在数据存储的设计上,因为区块链数据类似于传统数据库的预写式日志,因此通常按日志文件格式存储。由于系统需要大量基于哈希值的键值检索(如基于交易哈希值检索交易数据、基于区块哈希值检索区块数据),索引数据和状态数据通常存储在键值数据库中,如比特币系统、以太坊和超级账本都用LevelDB存储索引数据。
2.网络层
网络层(Network Layer)则类似于四大核心技术中的分布式存储,主要是点对点机制、数据传播机制和数据验证机制。分布式算法以及加密签名等都在网络层中实现,区块链上的各个节点通过这种方式来保持联系,共同维护整个区块链账本,比较熟知的有闪电网络、雷电网络等第二层支付协议。
块链里没有“中心”的概念。对于区块链体系结构来说,P2P(点对点)网络处于区块链的最底层。
区块链网络的P2P协议主要用于节点间的通信,将分布在不同地理位置的节点通过P2P协议连接起来,节点间传输的内容主要是交易数据和区块数据。在区块链网络中,节点时刻监听网络中广播的数据,当接收到相邻节点发来的新交易和新区块时,节点首先会验证这些新交易和新区块是否有效,有效的条件包括交易中的数字签名、区块中的工作量证明等,只有通过验证的新交易和新区块才会被处理(新交易被加入正在构建的区块中,新区块被链接到区块链)或转发,以防止无效数据的继续传播。
网络中的任意一个全节点,都可以根据它们对网络中其他交易的掌握情况来对外提供服务。
3.共识层
共识层(Consensus Layer)则相当于四大核心技术中的共识机制,主要包括共识算法机制。目前为止有 PoW、PoS、DPoS、PoW 和 PoS 结合、燃烧证明、重要性证明等十几种共识机制。
分布式共识打破了传统模式中的集中式共识,分布式共识采用一个中央数据库来检索交易并确认交易的有效性。分布式共识将权力和信任关系转移到了分布式的网络中,并且允许网络中的节点持续地将交易记录在公开的区块中,通过密码学的手段将区块进行串联,最终形成区块链这样的链式结构,从而保证记录的安全可靠。除分布式共识外,共识层还要保证分布式网络中节点的一致性。保证网络中节点一致性的算法决定了提交交易的方式,是分布式系统对外提供服务的必要保证。
去中心化的区块链由多方共同管理维护,其网络中的节点可由任意一方提供。当网络缺乏准入机制时,部分节点并不可信,因此需要可以容忍更多异常情况的共识算法,如拜占庭容错(Byzantine Fault-Tolerant,BFT)算法。超级账本(Hyperledger Fabric)添加了准入机制,只有被授权的节点才能加入网络,因此,它采取更高效的、不支持容忍拜占庭错误的Raft算法。但是在公有链场景下,并没有节点准入机制,并且节点数远远高于联盟链场景数,这导致超级账本并不适用BFT算法。为了解决节点自由进出可能带来的女巫攻击(Sybil Attack)问题,比特币系统使用了工作量证明(Proof of Work,PoW)机制。PoW机制是一种基于哈希函数的工作量证明算法。比特币系统要求只有完成一定计算工作量并提供证明的节点才可生成区块,每个网络节点利用自身计算资源进行哈希运算以竞争区块记账权,只要全网可信节点所控制的计算资源高于51%,即可证明整个网络是安全的。
(注:女巫攻击是指攻击者通过创建大量的匿名身份来破坏网络服务的信誉系统,并且使用这些匿名身份获得不成比例的巨大影响力。)
数据层、网络层、共识层三者构成了区块链层级的底层基础,也是区块链必不可少的三元组,缺少任何一个都无法称之为真正的区块链技术。
4.激励层
激励层(Actuator Layer)包括激励机制和分配制度。在区块链中一般指挖矿奖励,通过奖励一部分数字资产从而激励矿工去验证交易信息,从而维持挖矿活动以及区块链账本更新的持续进行;另外,还会制定一些相关制度,奖惩分明,激励记账节点,惩罚恶意节点。
5.合约层
合约层(Contract Layer)自然就和我们最常听到的智能合约有关。把代码写到合约里,就可以自定义约束条件,不需要第三方信任背书,到时间立即实时操作。当然除了智能合约,是区块链作为信任机器的重要层级,还有一些别的脚本代码、侧链应用等等。
能合约是一种用算法和程序来编制合同条款的部署在区块链上且可按照规则自动执行的数字化协议。早期由于计算条件的限制和应用场景的缺失,智能合约并未受到研究者的广泛关注,直到区块链技术出现之后,智能合约才被重新定义。区块链实现了去中心化的存储,智能合约在其基础上实现了去中心化的计算。
比特币脚本是指嵌在比特币交易上的一组指令,由于指令类型单一,实现功能有限,其只能算作智能合约的雏形。以太坊提供了图灵完备的脚本语言Solidity和Serpent,并且提供了沙盒环境以太坊虚拟机(Ethereum Virtual Machine,EVM)供用户编写和运行智能合约。超级账本的智能合约被称为链码(Chaincode),它选用Docker容器作为沙盒环境,Docker容器中带有一组经过签名的基础磁盘映像及Go与Java语言的运行环境和SDK,以运行Go与Java语言编写的链码。
6.应用层
应用层(Application Layer)就很简单了,类似于手机上的各种 APP,即区块链的各种应用场景DAPP。例如浙食链、浙冷链等就是浙江省市场监督局打造的区块链的应用项目,这个层面包括未来区块链应用落地的各个方面。
对于应用开发者来说,区块链作为一个底层平台有着不同的应用程序编程接口(API),包括合约调用接口和网络通信接口。通过这些接口,应用开发者可以开发出一种全新的去中心化和加密安全的应用。
比特币平台上的应用主要是基于比特币的支付应用。以太坊除支持基于以太币的数字货币外,还支持去中心化应用(Decentralized Application,DApp)。超级账本是主要面向企业的区块链平台,并没有提供数字货币相关的功能。基于超级账本的应用可使用Go、Java、Python、Node.js等语言的SDK来进行构建,并通过gPRC或REST接口与运行在超级账本节点上的智能合约进行通信。
网络层保证了节点连通,
共识层保证了节点间数据的一致性,
激励层提供了参与节点的绩效分配体系,
数据层高效地组织了区块链中的各种数据,
智能合约层由用户定义了一套规则用于产生符合具体逻辑的数据,
应用层被用来对外提供各种服务。
六个层级之间相互独立又不可分割,了解层级之间的关系和各个层级的相关知识,就会对区块链形成整体的认知和系统的理解。


