go ethereum 目錄大概介紹
go-ethereum項目的組織結(jié)構(gòu)基本上是按照功能模塊劃分的目錄,下面簡單介紹一下各個目錄的結(jié)構(gòu)奕剃,每個目錄在GO語言里面又被成為一個Package,我理解跟Java里面的Package應該是差不多的意思。
accounts? ? ? ? 實現(xiàn)了一個高等級的以太坊賬戶管理
bmt 二進制的默克爾樹的實現(xiàn)
build 主要是編譯和構(gòu)建的一些腳本和配置
cmd 命令行工具布讹,又分了很多的命令行工具笆檀,下面一個一個介紹
/abigen Source code generator to convert Ethereum contract definitions into easy to use, compile-time type-safe Go packages
/bootnode 啟動一個僅僅實現(xiàn)網(wǎng)絡發(fā)現(xiàn)的節(jié)點
/evm 以太坊虛擬機的開發(fā)工具, 用來提供一個可配置的证舟,受隔離的代碼調(diào)試環(huán)境
/faucet
/geth 以太坊命令行客戶端盈魁,最重要的一個工具
/p2psim 提供了一個工具來模擬http的API
/puppeth 創(chuàng)建一個新的以太坊網(wǎng)絡的向?qū)?/p>
/rlpdump 提供了一個RLP數(shù)據(jù)的格式化輸出
/swarm swarm網(wǎng)絡的接入點
/util 提供了一些公共的工具
/wnode 這是一個簡單的Whisper節(jié)點捶箱。 它可以用作獨立的引導節(jié)點。此外湿蛔,可以用于不同的測試和診斷目的创译。
common 提供了一些公共的工具類
compression Package rle implements the run-length encoding used for Ethereum data.
consensus 提供了以太坊的一些共識算法抵知,比如ethhash, clique(proof-of-authority)
console console類
contracts
core 以太坊的核心數(shù)據(jù)結(jié)構(gòu)和算法(虛擬機,狀態(tài),區(qū)塊鏈刷喜,布隆過濾器)
crypto 加密和hash算法残制,
eth 實現(xiàn)了以太坊的協(xié)議
ethclient 提供了以太坊的RPC客戶端
ethdb eth的數(shù)據(jù)庫(包括實際使用的leveldb和供測試使用的內(nèi)存數(shù)據(jù)庫)
ethstats 提供網(wǎng)絡狀態(tài)的報告
event 處理實時的事件
les 實現(xiàn)了以太坊的輕量級協(xié)議子集
light 實現(xiàn)為以太坊輕量級客戶端提供按需檢索的功能
log 提供對人機都友好的日志信息
metrics 提供磁盤計數(shù)器
miner 提供以太坊的區(qū)塊創(chuàng)建和挖礦
mobile 移動端使用的一些warpper
node 以太坊的多種類型的節(jié)點
p2p 以太坊p2p網(wǎng)絡協(xié)議
rlp 以太坊序列化處理
rpc 遠程方法調(diào)用
swarm swarm網(wǎng)絡處理
tests 測試
trie 以太坊重要的數(shù)據(jù)結(jié)構(gòu)Package trie implements Merkle Patricia Tries.
whisper 提供了whisper節(jié)點的協(xié)議。
可以看到以太坊的代碼量還是挺大的掖疮,但是粗略看初茶,代碼結(jié)構(gòu)還是挺好的。我希望先從一些比較獨立的模塊來進行分析浊闪。然后在深入分析內(nèi)部的代碼恼布。重點可能集中在黃皮書里面沒有涉及到的p2p網(wǎng)絡等模塊。