以太坊架构与模块化结构
一:以太坊核心概念
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节点协议 |
以太坊架构与模块化结构
一:以太坊核心概念
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节点协议 |