這篇文章主要是對上一篇文章的一個補充,在進行操作前,我們需要準備兩台部署有以太坊環境的電腦。建議學習以太坊或是其它區塊鏈項目首選linux或mac os,個人覺得cmd用起來不太方便,因為我手上另有一台window系統的電腦,所以我就在window上重新編譯了一下以太坊源碼,在編譯過程中遇到了一些問題,我就順便把問題的解決方案簡單講一下。
編譯源碼
1.Go語言環境準備,可以直接去官網下載安裝包,安裝好之後一般情況下環境變數就自動設定好了,不過需要配置$GOPATH
的環境變數,不會的自己上網找教程。
2.go-ethereum
源碼和golang.org\x\net
源碼(注意window下的路勁分隔字元),源碼都必須放在$GOPATH\src
下,檔案結構如下:
$GOPATH$/src ├── github.com │ └── ethereum │ └── go-ethereum └── golang.org └── x └── net
3.配置GCC
環境
如果沒有配置gcc
環境在編譯過程中會報以下錯誤:
exec: "gcc": executable file not found in %PATH%
解決辦法:
下載安裝GCC,然後將安裝目錄下的bin檔案夾添加到Path環境變數中,開啟cmd,輸入
gcc -v
如果出現版本資訊,則表示安裝成功。
提示:每次修改了環境變數都要重新開啟cmd
繼續編譯源碼又出現錯誤資訊:
cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
解決辦法:
直接下載編譯好的包進行安裝
- 下載地址:
https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.8.2/threads-posix/seh/,直接下載下面的壓縮包
- 解壓後把檔案夾下的bin配置到Path路徑中
4.編譯源碼
在cmd中切換到$GOPATH\src
路徑,然後執行命令:
go install -v github.com\ethereum\go-ethereum\cmd\gethgo install -v github.com\ethereum\go-ethereum\cmd\evm
編譯成功之後在$GOPATH\bin
會出現geth.exe
和evm.exe
,如所示:
準備創世區塊
這步操作跟上章講的步驟一樣,注意genesis.json的內容跟前面的一模一樣,檔案結構如下:
提示:
你可以按照個人喜歡把檔案放在其它地方,初始化和啟動節點的時候需要跟上完整的路徑
初始化創世區塊
geth --datadir d:\ethprivatechain\data init d:\ethprivatechain\genesis.json
啟動節點
1.進入geth
控制台
geth --datadir d:\ethprivatechain\data --networkid 100 console
為了區分操作,我的兩台電腦mac為節點1,win為節點2,mac和win上先後啟動geth
2.mac
上擷取節點的enode資訊
> admin.nodeInfo.enode//輸出資訊"enode://e08f44fbedfd17b549a5237ebe7548501a891f34859cd71fdf083d99e8de2763902967af54f67423ac632648904674ffa86d7fa6fccee649a992b4942f424b17@[::]:30303"
3.在win
的節點上添加第一個節點的操作
> admin.addPeer("enode://e08f44fbedfd17b549a5237ebe7548501a891f34859cd71fdf083d99e8de2763902967af54f67423ac632648904674ffa86d7fa6fccee649a992b4942f424b17@192.168.111.20:30303")//輸出資訊true
注意:enode資訊中的[::]替換成第一個節點的ip,問號及後面部分不需要
4.查看串連的節點
//查看串連的節點數量,此處為1> net.peerCount1// 查看串連的節點資訊> admin.peers[{ caps: ["eth/63"], id: "e08f44fbedfd17b549a5237ebe7548501a891f34859cd71fdf083d99e8de2763902967af54f67423ac632648904674ffa86d7fa6fccee649a992b4942f424b17", name: "Geth/v1.8.16-unstable/darwin-amd64/go1.10.2", network: { localAddress: "192.168.111.233:64651", remoteAddress: "192.168.111.20:30303" }, protocols: { eth: { difficulty: 17179869184, head: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3", version: 63 } }}]
節點1和節點2都可以進行挖礦,並且只要有一個節點在進行挖礦,其他節點的交易也都能正常進行。