
2.2 以太坊架构
根据以太坊白皮书 A Next-Generation Smart Contract and Decentralized Application Platform的描述,以太坊架构如图2-2所示。

图2-2 以太坊架构
如图2-2所示,以太坊架构分为7层,由下至上依次是存储层、数据层、网络层、协议层、共识层、合约层、应用层。
其中存储层主要用于存储以太坊系统运行中的日志数据及区块链元数据,存储技术主要使用文件系统和LevelDB。
数据层主要用于处理以太坊交易中的各类数据,如将数据打包成区块,将区块维护成链式结构,区块中内容的加密与哈希计算,区块内容的数字签名及增加时间戳印记,将交易数据构建成Merkle树,并计算Merkle树根节点的hash值等。
与比特币的不同之处在于以太坊引入了交易和交易池的概念。交易指的是一个账户向另一个账户发送被签名的数据包的过程。而交易池则存放通过节点验证的交易,这些交易会放在矿工挖出的新区块里。
以太坊的Event(事件)指的是和以太坊虚拟机提供的日志接口,当事件被调用时,对应的日志信息被保存在日志文件中。
与比特币一样,以太坊的系统也是基于P2P网络的,在网络中每个节点既有客户端角色,又有服务端角色。
协议层是以太坊提供的供系统各模块相互调用的协议支持,主要有HTTP、RPC协议、LES、ETH协议、Whipser协议等。
以太坊基于HTTP Client实现了对HTTP的支持,实现了GET、POST等HTTP方法。外部程序通过JSON RPC调用以太坊的API时需通过RPC(远程过程调用)协议。
Whisper协议用于DApp间通信。
LES的全称是轻量级以太坊子协议(Light Ethereum Sub-protocol),允许以太坊节点同步获取区块时仅下载区块的头部,在需要时再获取区块的其他部分。
共识层在以太坊系统中有PoW(Proof of Work)和PoS(Proof of Stake)两种共识算法。
合约层分为两层,底层是EVM(Ethereum Virtual Machine,即以太坊虚拟机),上层的智能合约运行在EVM中。智能合约是运行在以太坊上的代码的统称,一个智能合约往往包含数据和代码两部分。智能合约系统将约定或合同代码化,由特定事件驱动触发执行。因此,在原理上适用于对安全性、信任性、长期性的约定或合同场景。在以太坊系统中,智能合约的默认编程语言是Solidity,一般学过JavaScript语言的读者很容易上手Solidity。
应用层有DApp(Decentralized Application,分布式应用)、以太坊钱包等多种衍生应用,是目前开发者最活跃的一层。