1.数据层
数据层是区块链的基础,在数据层数据以交易的形式存储在分布式共享账本中。数据层通过使用哈希函数、Merkle树、非对称加密、数字签名等技术实现以太坊区块链中数据的不可篡改性和安全性,为整个以太坊区块链系统提供安全可靠的数据支持。
(1)哈希函数:哈希函数可以将输入为不同长度的内容转化为定长,在哈希函数中,既不需要知道输入信息的具体内容,也不需要限定输入信息的长度,只要通过哈希函数进行计算就可以获得固定长度的比特值。具有单向性、抗碰撞性和确定性等属性的哈希函数满足了区块链中的防篡改、快速验证等需求特性。
单向性:对于正输入,哈希函数可以轻松计算输出结果。但是,基于输出结果来反向计算输入原始数据非常困难。因此,哈希函数的操作过程是单向不可逆的,从而确保了输入信息的安全性。
抗碰撞性:输入不同的两个数,经过哈希运算得到相同的输出结果,只是一种理想状态,现实中还不能同时找到这样的两个数。
确定性:在哈希函数运算的过程中,即使重复输入一样的数据内容,最终计算出来的结果也是确定的,不会随其他因素而发生改变。
(2)非对称加密:非对称加密,也称为公钥加密,是目前被广泛使用的一种加密算法。与对称加密不同的是,非对称加密过程中加密和解密分别采用不同的密钥,即公钥用来进行加密,私钥用来进行解密。(公钥一般公开,而私钥由用户私下保存)。
(3)区块:区块主要包括两部分——区块头和区块体。区块头中记录了相关的属性字段,其中前一个区块的哈希值是区块中至关重要的一个属性,该属性使前后区块相互链接从而形成一条链即区块链。区块体中则记录了相关的所有交易,并且使用一种基于哈希值的二叉树结构Merkle树对交易数据进行存储和组织。

(4)Merkle树是一种重要的数据结构,一般是二叉树结构,也可以是多叉树,包括叶子节点、中间节点和根节点。Merkle树的完整计算过程,如图2.3所示。首先对交易数据(Tx0、Tx1、Tx2、Tx3)分别进行哈希处理已获得哈希值(hash0,hash1,hash2,hash3),然后将哈希计算成对组合,并重复执行,直到得到最后一个根哈希值结束。

(5)数字签名:数字签名完整过程分为签名和验证两部分。在发送消息之前,发送方首先需要通过哈希函数对将要发送的消息进行计算,进而获得哈希摘要,然后使用私钥对摘要进行签名。当接收方从发送方收到数字签名,首先使用公钥对数字签名进行解密以获得摘要,然后通过哈希函数计算原始消息以获得摘要,并将它们的结果进行比较。若一样,则说明没有被篡改,否则,意味着信息已被篡改。
2.网络层
网络层包括P2P网络机制、数据广播机制和数据验证机制。以太坊的底层网络结构是一个结构化的P2P网络,其中每个节点(即客户端)存储整个区块链的副本。在以太坊网络中,节点实时监听着网络中广播的数据,通过TCP协议彼此之间建立连接以及传输消息,当接收到新的交易和区块时,就会对这些交易和区块的有效性进行验证,只有验证通过的交易和区块才会继续被处理和转发。
3.共识层
共识层可以确保节点在分散网络中就区块数据的一致性和正确性达成共识,目前以太坊中包括PoW和PoS两种共识算法。
4.激励层
激励层包括发行机制和分配机制。在以太坊中奖励方式主要包括普通区块奖励和叔块奖励(叔块奖励是对产生或者发现不在主链上的区块的旷工进行奖励)。通过给予旷工以太币奖励从而激励矿工积极参与交易的验证和区块的生成,维护系统正常循环发展。
5.合约层
合约层分为以太坊虚拟机(Ethereum Virtual
Machine,EVM)和智能合约。以太坊网络中的每个节点都在EVM下运行并执行其指令,通过EVM可以执行任意复杂算法,智能合约被转换为EVM代码,然后由节点执行,无需第三方的参与,当条件符合时则会自动触发执行,用于编写智能合约的最流行的编程语言之一是Solidity。
6.应用层
应用层包括DAPP(去中心化应用)、以太坊等各种衍生应用。开发者可以在基于以太坊平台进行应用产品的开发[1]。
