以太坊原始碼解讀(2)以太坊客戶端geth原始碼目錄解析
阿新 • • 發佈:2018-12-22
下面我們來從Geth原始碼的目錄來看看以太坊都有哪些模組。
一、目錄分析
go-etherreum-master |- accounts /* 實現了高層級Ethereum賬號管理 */ | |- abi // 該包實現了Ethereum的ABI(應用程式二進位制介面) | bind.go // 該包生成Ethereum合約的Go繫結 | |- keystore // 實現了Secp256k1私鑰的加密儲存 | |- usbwallet // 該包實現了支援USB硬體錢包 | accounts.go // 定義了賬號的結構 |- build |- cmd /* 命令列工具 */ | |- abigen // 一個原始碼生成器,它將Ethereum智慧合約定義(程式碼) 轉換為易於使用的、編譯時型別安全的Go package。 | |- bootnode // 該節點為Ethereum發現協議執行一個引導節點。 | |- clef // Clef可以用來簽署交易和資料,並且可以代替geth的賬戶管理。這使DApps不依賴於geth的賬戶管理。 | |- ethkey // 該包描述了與以太坊keyfiles的互動命令列 | |- evm // 執行EVM程式碼片段的命令列 | |- faucet // 以太坊支援的輕量級客戶 | |- geth // 啟動客戶端命令列 | |- internal // 提供與使用者瀏覽器互動的工具 | |- p2psim // 客戶端命令列模擬 HTTP API | |- puppeth // 組裝和維護個人網路的命令列 | |- rlpdump // 打印出兼顧使用者友好和機器友好的RLP格式資料 | |- swarm // bzzhash命令,用來更好的計算出swarm雜湊樹 | |- utils // 為go-ethereum命令提供說明 | |- wnode // 一個簡單的Whisper節點 |- common /* 一些工具函式 */ | |- bitutil // 快速位操作 | |- compiler // 該包包裝了可執行的solidity編譯器 | |- hexutil // 以0x為字首的十六進位制編碼 | |- math // 數學工具 | big.go // 大整數 | bytes.go // bytes-hex工具 | format.go // 格式化time.Duration值 | types.go // 資料型別及轉換 |- consensus /* 以太坊的共識引擎 */ | |- clique // 實現了POA共識引擎 | |- ethash // 實現了POW共識引擎 | |- misc // 與DAO硬分叉相關的確認與共識 | consensus.go // 定義了ChainReader和Engine介面 |- console /* 是一個Javascript解釋的執行環境 */ |- contracts /* 實現了支票簿合約和ENS */ | |- chequebook // “支票簿”可以建立並簽署從單一合同到多個受益人的支票。它是對等微支付的傳出支付處理程式。 | |- ens // ENS(ethereum name service) |- core /* 以太坊的核心資料結構和演算法(虛擬機器,狀態,區塊鏈,布隆過濾器) */ | |- asm // 彙編和反彙編介面 | |- bloombits // 過濾資料 | |- rawdb // | |- state // 世界狀態的實現 | | database.go | | iterator.go | | journal.go | | managed_state.go | | state_object.go | | statedb.go | | sync.go | |- types // 區塊鏈中的資料型別 | | block.go | | bloom9.go | | derive_sha.go | | gen_header_json.go | | gen_log_json.go | | gen_receipt_json.go | | gen_tx_json.go | | log.go | | receipt.go | | transaction.go | | transaction_signing.go | |- vm // 實現evm | | | block_validator.go | blockchain.go | block.go | chain_indexer.go | chain_makers.go | error.go | events.go | evm.go | gaspool.go | gen_genesis.go | genesis.go | genesis_alloc.go | headerchain.go | state_processor.go | state_transition.go | tx_cacher.go | tx_journal.go | tx_list.go | tx_pool.go | types.go |- crypto /* 加密和hash演算法 */ |- dashboard /* 儀表板是整合到geth的資料視覺化工具,用於收集和視覺化Ethereum節點的有用資訊。 */ |- eth /* 實現所有以太坊協議 */ | |- downloader // 手動全鏈同步 | |- fetcher // 基於塊通知的同步 | |- filter // 用於區塊、交易和日誌事件的過濾 | |- gasprice // 返回區塊的建議gasprice | |- tracers // 收集JavaScript交易追蹤 | backend.go | bloombits.go | handler.go | metrics.go | peer.go | protocol.go | sync.go |- ethclient /* 提供以太坊的RPC客戶端 */ |- ethdb /* eth的資料庫(包括實際使用的leveldb和供測試使用的記憶體資料庫) */ |- ethstats /* 提供網路狀態報告 */ |- event /* 處理實時事件 */ |- internal /* */ |- les /* 輕量級Ethereum子協議 */ |- light /* 實現按需檢索能力的狀態和鏈物件 */ |- log /* 提供對人機均友好的日誌資訊 */ |- metrics /* go-Metrics,為系統某服務做監控、統計 */ |- miner /* 提供以太坊的區塊建立和挖礦 */ |- node /* 以太坊的多種型別的節點 */ |- p2p /* 實現p2p網路協議 */ |- params /* 以太坊系統中所用到的一些常量和變數 */ |- rlp /* 以太坊序列化處理 */ |- rpc /* 遠端方法呼叫 */ |- signer |- swarm /* swarm 是一個分散式儲存平臺和內容分發服務 */ |- trie /* 定義了以太坊重要的資料結構:Package trie implements Merkle Patricia Tries*/ |- wisper /* 實現一種點對點的隱祕訊息傳輸網路 */ | interface.go /* 定義了以太坊必要的介面,包括區塊鏈讀取、交易讀取、鏈狀態讀取、同步、訊息呼叫、過濾日誌、設定gasPrice等 */
原始碼api
經過檢視,原始碼的api位置有很多,包括:
node/api.go
eth/api.go
eth/downloader/api.go
eth/filters/api.go
consensus/clique/api.go
contracts/chequebook/api.go
internal/debug/api.go
whisper/whisperv2/api.go
whisper/whisperv5/api.go
whisper/whisperv6/api.go
swarm/api/api.go
internal/ethapi/api.go
...
通過這些api檔案,我們可以找到所有的web3.js(開放了一部分給geth管理API)呼叫的相關方法。