如果要了解go-ethereum项目的实现与机制,需要深入研究项目的源码,本文先就以太坊的目录进行整理说明,对于官方的go实现的ethereum客户端,目录也对应着程序包的结构。
一级目录
accounts :实现以太坊账户及钱包的管理
bmt :实现了二叉merkle树
build :用于构建测试、发布的文件目录
cmd :实现了客户端主要的命令行程序
common :实现了数值处理、脚本支持等公共的工具函数
compression:实现run-length encoding编码用于Ethereum数据
consensus :实现多种以太共识引擎
console:内部实现控制台程序
containers :多种容器部署工具
contracts :内部合约
core :支持内部合约的核心代码
crypto:加密算法库
dashboard:仪表盘,被集成到geth中,收集以太坊节点数据,用于可视化分析
eth :以太坊协议
ethclient:以太坊RPC API客户端
ethdb:对levelDB的封装的db接口
ethstats :网络统计报告服务
event :处理时时事件的包
internal:
les:轻量级Ethereum子协议
light :EthereumLight客户端实现按需检索能力的状态和链对象
log:log输出日志
metrics :Coda Hale度量库的Go端口
miner :以太坊块创建和挖矿程序包
mobile :geth的移动端API
node :设置多维接口节点
p2p :p2p网络协议
params:
rlp :RLP系列化格式
rpc:通过网络或者I/O链接来访问接口
swarm :
tests:以太坊JSON测试程序包
trie :Merkle Patricia树实现
vendor :外部第三方程序包
whisper :Whisper协议
二级:account包
abi :Ethereum的ABI(应用程序二进制接口)程序包
keystore :实现了Secp256k1私钥的加密存储
usbwallet :实现了支持USB硬件钱包
二级:cmd 包
abigen :一个源代码生成器,它将Ethereum智能合约定义(代码) 转换为易于使用的、编译时类型安全的Go package
bootnode:该节点为Ethereum发现协议运行一个引导节点
ethkey :
evm :以太坊执行虚拟机字节码命令行工具
faucet :faucet是以太faucet支持的轻量级客户
geth :geth是Ethereum的官方客户端命令行
internal:
p2psim :p2psim为客户端命令行模拟 HTTP API
puppeth:puppeth是一个命令组装和维护私人网路
rlpdump :rlpdump能更好的打印出RLP格式的数据
swarm :bzzhash命令能够更好的计算出swarm哈希树
utils :为Go-Ethereum命令提供说明
wnode
二级:common包
bitutil :该包实现快速位操作
compiler:包装了Solity编译器可执行文件
fdlimit :获取系统文件描述符的最大值
hexutil :以0x为前缀的十六进制编码
math:数学工具,多是对Int数据类型的处理
mclock:对monotime库的包装,简单的时间函数
number :对number的封装
二级:core包
asm :汇编和反汇编接口
bloombits :Bloom过滤批量数据
state :封装在以太状态树之上的一种缓存结构
types :以太合约支持的数据类型
vm :以太虚拟机
二级:p2p包
discover :节点发现协议
discv5 :RLPx v5主题相关的协议
enr:实现EIP-778中的以太坊节点记录
nat:提供网络端口映射协议的权限
netutil:网络包拓展
protocols:p2p拓展
simulations:实现模拟p2p网络