如果要了解go-ethereum項目的實現與機制,需要深入研究項目的源碼,本文先就以太坊的目錄進行整理說明,對于官方的go實現的ethereum客戶端,目錄也對應著程序包的結構。
一級目錄
accounts :實現以太坊賬戶及錢包的管理
bmt :實現了二叉merkle樹
build :用于構建測試、發(fā)布的文件目錄
cmd :實現了客戶端主要的命令行程序
common :實現了數值處理、腳本支持等公共的工具函數
compression:實現run-length encoding編碼用于Ethereum數據
consensus :實現多種以太共識引擎
console:內部實現控制臺程序
containers :多種容器部署工具
contracts :內部合約
core :支持內部合約的核心代碼
crypto:加密算法庫
dashboard:儀表盤,被集成到geth中,收集以太坊節(jié)點數據,用于可視化分析
eth :以太坊協議
ethclient:以太坊RPC API客戶端
ethdb:對levelDB的封裝的db接口
ethstats :網絡統(tǒng)計報告服務
event :處理時時事件的包
internal:
les:輕量級Ethereum子協議
light :EthereumLight客戶端實現按需檢索能力的狀態(tài)和鏈對象
log:log輸出日志
metrics :Coda Hale度量庫的Go端口
miner :以太坊塊創(chuàng)建和挖礦程序包
mobile :geth的移動端API
node :設置多維接口節(jié)點
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:該節(jié)點為Ethereum發(fā)現協議運行一個引導節(jié)點
ethkey :
evm :以太坊執(zhí)行虛擬機字節(jié)碼命令行工具
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編譯器可執(zhí)行文件
fdlimit :獲取系統(tǒng)文件描述符的最大值
hexutil :以0x為前綴的十六進制編碼
math:數學工具,多是對Int數據類型的處理
mclock:對monotime庫的包裝,簡單的時間函數
number :對number的封裝
二級:core包
asm :匯編和反匯編接口
bloombits :Bloom過濾批量數據
state :封裝在以太狀態(tài)樹之上的一種緩存結構
types :以太合約支持的數據類型
vm :以太虛擬機
二級:p2p包
discover :節(jié)點發(fā)現協議
discv5 :RLPx v5主題相關的協議
enr:實現EIP-778中的以太坊節(jié)點記錄
nat:提供網絡端口映射協議的權限
netutil:網絡包拓展
protocols:p2p拓展
simulations:實現模擬p2p網絡