今天看啥  ›  专栏  ›  liufan

以太坊源码解读(1)以太坊架构与模块结构

liufan  · 掘金  ·  · 2019-08-02 01:42
阅读 7

以太坊源码解读(1)以太坊架构与模块结构

以太坊架构与模块化结构

一:以太坊核心概念

EVM:

以太坊虚拟机,以太坊中智能合约的运行环境

Accounts:

区别去比特币的UTXO,以太坊构建里账户,账户分为两类,内部账户和外部账户,内部账户指合约账户,外部账户指用户账户

Transaction:

在以太坊网络上的任何一个消息的传递都是一次交易

gas:

以太坊网络的运行机制之一,每执行一步合约代码都与要消耗一定的gas,gas的设定一方面是为了提高用户的作恶成本,另一方面也是为了提高矿工的积极性

Mine:

挖矿,以太坊网络通过工作量证明机制保证节点之间的同步与网络的安全运行

Storage, Memory:

存储与主存,storage被称为存储,kv形式储存,memory被称为主存每次合约被调用都会有一块新的被清除过的主存

P2P:

p2p对等网络,作为以太坊网络的构成机制之一,保证网络内的所有节点对等

二:以太坊总体结构与数据结构

以太坊的总体结构可以被简单分为三层:

从低到高为 协议层:P2P网络通信,分布式算法,加密签名和数据存储技术

​ 接口层:接口成与协议层完全的进行分离,包括分布式存储等

​ 应用层:主要利用evm与智能合约构造去中心化的dapp

以太坊的总体结构可以被详细划分为六层:

从低到高为 数据层:以key-value的形式存储数据,使用LevelDb数据库,以及Block

	    网络层:p2p网络
复制代码

​ 共识层:pow+pos共识

	    激励层:mine机制
复制代码

​ 合约层:实现以代码约束行为的方式

​ 应用层:以以太猫为代表的Dapp

以太坊的核心数据结构

Block

所有账户的相关活动,以交易(Transaction)的格式存储,每个Block有一个交易对象的列表;每个交易的执行结果,由一个Receipt对象与其包含的一组Log对象记录;所有交易执行完后生成的Receipt列表,存储在Block中(经过压缩加密)。不同Block之间,通过前向指针ParentHash一个一个串联起来成为一个单向链表,BlockChain 结构体管理着这个链表。Block包括Header和Body两个部分

Header

Header是Block的组成部分主要包括关于block的属性

熟悉 解释
ParentHash 除创世区块外所有的区块都有的前一个区块的hash
Coinbase 矿工的地址
UncleHash 叔块的Hash
Root StateDB中的根节点的RLP的Hash值
TXHash Block中tx trie的根节点的RLP的Hah值
ReceiptHash Block中的 "Receipt Trie”的根节点的RLP哈希值
Bloom Bloom过滤器(Filter),用来快速判断一个参数Log对象是否存在于一组已知的Log集合中
Difficulty 区块的难度
Number 区块的序号
Time 区块“应该”被创建的时间
GasLimit 区块内所有Gas消耗的理论上限
GasUsed 区块内所有Transaction执行时所实际消耗的Gas总和
Nonce 一个64bit的哈希数,它被应用在区块的"挖掘"阶段,并且在使用中会被修改
Body
熟悉 解释
Tracsactions[] 区块内部的交易集合
Uncles[] 叔块集合
BlockChain

BlockChain结构体被用来管理整个区块单向链表,在一个Ethereum客户端软件(比如钱包)中,只会有一个BlockChain对象存在。同Block/Header的关系类似,BlockChain还有一个成员变量类型是HeaderChain, 用来管理所有Header组成的单向链表。

HeaderChain

HeaderChain在全局范围内也仅有一个对象,并被BlockChain持有(准确说是HeaderChain只会被BlockChain和LightChain持有,LightChain类似于BlockChain,但默认只处理Headers,不过依然可以下载bodies和receipts)。

MPT

Ethereum 使用的Merkle-PatriciaTrie(MPT)结构,源自于Trie结构,又分别继承了PatriciaTrie和MerkleTree的优点,并基于内部数据的特性,设计了全新的节点体系和插入/载入机制。

三:go-ethereum源码目录结构

包名 说明
accounts 以太坊实现的账户功能
build 一些配置信息
cmd m命令行结构
common 提供了公共数据结构,工具类
console console控制台
contracts 包含
containers/docker
core 核心代码
crypto 加密和hash算法
dashboard
eth 实现了以太坊的协议
ethclient 提供了以太坊的RPC客户端
ethdb eth的数据库(包括实际使用的leveldb和供测试使用的内存数据库)
ethstats 提供网络状态的报告
event 实时的事件
internal
les 以太坊的轻量级协议子集
light 实现以太坊轻量级客户端的按需检索功能
log 日志信息
metrics 磁盘计数
miner 挖矿与区块的生成
mobile 移动端使用的warpper
node 节点多种类型
p2p 网络协议
params
rlp 以太坊hash序列化处理
rpc 远程调用
signer
swarm 网络处理
tests 测试
trie 以太坊重要的数据结构Package trie implements Merkle Patricia Tries.
vendor 第三方
whisper whisper节点协议



原文地址:访问原文地址
快照地址: 访问文章快照