概述
在github上,python版的ethereum按照项目的组织可以划分包括3大组件,从上层到底层依次是:
- pyethereum: 以太坊核心区块链操作库, 包括虚拟机实现, 挖矿,分叉处理等等
- pyethapp: 实现区块链服务,以太坊加密经济学的状态机
- pydevp2p: 通过多路复用和加密连接实现p2p网络的节点发现协议, 传输多种业务的消息
主要功能
从软件架构的角度看,以太坊可以分为4层。分别如下:
-
链相关的核心层
该层主要功能是处理本地节点中block相关的数据生成区块链数据结构并对其持久化,包括:
- 管理block和chain,包括分叉chain处理,时间戳混乱的block管理等。该层不关心block是本节点挖矿出来的还是同步过来的。block分叉处理有专门的处理协议,叫做GHOST协议。
- 状态转换:执行交易,对每个状态的修改并持久化。
- 挖矿服务:实现PoW或其他公司机制。
-
service服务层
ChainService功能包括:管理交易池,提交block给核心层,peer之间block、交易同步和广播;
peerManager服务功能包括:管理节点的生命周期,对协议层的数据进行处理,比如收发交易数据,同步block等。
其他的service包括:
powService:实现挖矿算法;
DBService: 管理持久化用的数据库;
AccountService:账户管理;
console/RPCService: 对外提供访问和操作接口服务;
-
protocol协议层:
按照协议要求的格式编码并发送消息; 对p2p网络上接收到的消息进行解码后送给服务层处理。
-
network网络层
使用类Kademlia协议作为节点发现协议,负责p2p节点的发现,动态维护当前活跃节点列表;
并负责peer之间的tcp连接及收发报文并分发给协议层。
模块图
pyethapp的启动命令及对应的入口函数如下
- pyethapp启动后执行
app(...)
- 子命令run, 入口函数
run(...)
: 启动运行客户端 - 子命令config,入口函数
config()
: 打印当前配置 - 子命令blocktest,入口函数
blocktest(file,name)
: 根据block文件在内存中生成一个block测试链 - 子命令snapshot, 入口函数
snapshot(...)
: 创建一个当前'世界状态'的快照, 包括配置数据和账户 - 子命令load_snapshot,入口函数
load_snapshot(...)
: 加载快照 - 子命令export,入口函数
export_blocks(from,to,file)
: 导出指定from到to的block - 子命令import,入口函数
import_blocks(file)
: 导入block - 子命令account new,入口函数
new_account()
:创建账户 - 子命令account list,入口函数
list_accounts()
:查看账户 - 子命令account import,入口函数
import_accounts()
:导入账户 - 子命令account update,入口函数
update_accounts()
:修改账户密码