go-ethereum源碼解析-2018-06-27

來源:互聯網
上載者:User
20180526132525297.jpg20180526132553211.png20180526132539117.png

go-ethereum源碼解析

因為go ethereum是最被廣泛使用的以太坊用戶端, 所以後續的源碼分析都從github上面的這份代碼進行分析。

搭建go ethereum調試環境

windows 10 64bit

首先下載go安裝包進行安裝,因為GO的網站被牆,所以從下面地址下載。

https://studygolang.com/dl/golang/go1.9.1.windows-amd64.msi

安裝好之後,設定環境變數,把C:\Go\bin目錄添加到你的PATH環境變數, 然後增加一個GOPATH的環境變數,GOPATH的值設定為你的GO語言下載的代碼路徑(我設定的是C:\GOPATH)

安裝git工具,請參考網路上的教程安裝git工具, go語言從github自動下載代碼需要git工具的支援

開啟命令列工具下載 go-ethereum的代碼

go get github.com/ethereum/go-ethereum

命令執行成功之後,代碼就會下載到下面這個目錄,%GOPATH%\src\github.com\ethereum\go-ethereum
如果執行過程中出現

# github.com/ethereum/go-ethereum/crypto/secp256k1exec: "gcc": executable file not found in %PATH%

則需要安裝gcc工具,我們從下面地址下載並安裝

http://tdm-gcc.tdragon.net/download

接下來安裝IDE工具。 我是用的IDE是JetBrains的Gogland。 可以在下面地址下載

https://download.jetbrains.com/go/gogland-173.2696.28.exe

安裝完成後開啟IDE. 選擇File -> Open -> 選擇GOPATH\src\github.com\ethereum\go-ethereum目錄開啟。

然後開啟go-ethereum/rlp/decode_test.go. 在編輯框右鍵選擇運行, 如果運行成功,代表環境搭建完成。

Ubuntu 16.04 64bit

go安裝包進行安裝

apt install golang-go git -y

golang環境配置:

編輯/etc/profile檔案,在該檔案中加入以下內容:export GOROOT=/usr/bin/go  export GOPATH=/root/home/goprojectexport GOBIN=/root/home/goproject/binexport GOLIB=/root/home/goproject/export PATH=$PATH:$GOBIN:$GOPATH/bin:$GOROOT/bin

執行以下命令,使得環境變數生效:

# source /etc/profile

下載源碼:

#cd  /root/home/goproject; mkdir src; cd src  #進入go項目目錄,並建立src目錄, 並進入src目錄#git clone https://github.com/ethereum/go-ethereum

使用vim或其他IDE開啟即可;

go ethereum 目錄大概介紹

go-ethereum項目的組織圖基本上是按照功能模組劃分的目錄,下面簡單介紹一下各個目錄的結構,每個目錄在GO語言裡面又被成為一個Package,我理解跟Java裡面的Package應該是差不多的意思。

accounts            實現了一個高等級的以太坊賬戶管理bmt         二進位的默克爾樹的實現build           主要是編譯和構建的一些指令碼和配置cmd         命令列工具,又分了很多的命令列工具,下面一個一個介紹    /abigen     Source code generator to convert Ethereum contract definitions into easy to use, compile-time type-safe Go packages    /bootnode   啟動一個僅僅實現網路發現的節點    /evm        以太坊虛擬機器的開發工具, 用來提供一個可配置的,受隔離的代碼調試環境    /faucet         /geth       以太坊命令列用戶端,最重要的一個工具    /p2psim     提供了一個工具來類比http的API    /puppeth    建立一個新的以太坊網路的嚮導    /rlpdump    提供了一個RLP資料的格式化輸出    /swarm      swarm網路的存取點    /util       提供了一些公用的工具    /wnode      這是一個簡單的Whisper節點。 它可以用作獨立的引導節點。此外,可以用於不同的測試和診斷目的。common          提供了一些公用的工具類compression     Package rle implements the run-length encoding used for Ethereum data.consensus       提供了以太坊的一些共識演算法,比如ethhash, clique(proof-of-authority)console         console類contracts   core            以太坊的核心資料結構和演算法(虛擬機器,狀態,區塊鏈,布隆過濾器)crypto          加密和hash演算法,eth         實現了以太坊的協議ethclient       提供了以太坊的RPC用戶端ethdb           eth的資料庫(包括實際使用的leveldb和供測試使用的記憶體資料庫)ethstats        提供網路狀態的報告event           處理即時的事件les         實現了以太坊的輕量級協議子集light           實現為以太坊輕量級用戶端提供按需檢索的功能log         提供對人機都友好的日誌資訊metrics         提供磁碟計數器miner           提供以太坊的區塊建立和挖礦mobile          移動端使用的一些warppernode            以太坊的多種類型的節點p2p         以太坊p2p網路通訊協定rlp         以太坊序列化處理rpc         遠程方法調用swarm           swarm網路處理tests           測試trie            以太坊重要的資料結構Package trie implements Merkle Patricia Tries.whisper         提供了whisper節點的協議。

可以看到以太坊的代碼量還是挺大的,但是粗略看,代碼結構還是挺好的。我希望先從一些比較獨立的模組來進行分析。然後在深入分析內部的代碼。重點可能集中在黃皮書裡面沒有涉及到的p2p網路等模組。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.