這篇文章主要是對上一篇文章的一個補(bǔ)充肢扯,在進(jìn)行操作前担锤,我們需要準(zhǔn)備兩臺部署有以太坊環(huán)境的電腦。建議學(xué)習(xí)以太坊或是其它區(qū)塊鏈項(xiàng)目首選linux或mac os肛循,個人覺得cmd用起來不太方便,因?yàn)槲沂稚狭碛幸慌_window系統(tǒng)的電腦累舷,所以我就在window上重新編譯了一下以太坊源碼夹孔,在編譯過程中遇到了一些問題,我就順便把問題的解決方法簡單講一下搭伤。
編譯源碼
1.Go語言環(huán)境準(zhǔn)備,可以直接去官網(wǎng)下載安裝包身堡,安裝好之后一般情況下環(huán)境變量就自動配置好了拍鲤,不過需要配置$GOPATH
的環(huán)境變量汞扎,不會的自己上網(wǎng)找教程擅这。
2.go-ethereum
源碼和golang.org\x\net
源碼(注意window下的路勁分隔符),源碼都必須放在$GOPATH\src
下一忱,文件結(jié)構(gòu)如下:
$GOPATH$/src
├── github.com
│ └── ethereum
│ └── go-ethereum
└── golang.org
└── x
└── net
3.配置GCC
環(huán)境
如果沒有配置gcc
環(huán)境在編譯過程中會報(bào)以下錯誤:
exec: "gcc": executable file not found in %PATH%
解決辦法:
下載安裝GCC谭确,然后將安裝目錄下的bin文件夾添加到Path環(huán)境變量中,打開cmd逐哈,輸入
gcc -v
如果出現(xiàn)版本信息,則表示安裝成功禀梳。
提示:每次修改了環(huán)境變量都要重新打開cmd
繼續(xù)編譯源碼又出現(xiàn)錯誤信息:
cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
解決辦法:
直接下載編譯好的包進(jìn)行安裝
- 下載地址:
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
路徑,然后執(zhí)行命令:
go install -v github.com\ethereum\go-ethereum\cmd\geth
go install -v github.com\ethereum\go-ethereum\cmd\evm
編譯成功之后在$GOPATH\bin
會出現(xiàn)geth.exe
和evm.exe
嘴瓤,如下圖所示:
準(zhǔn)備創(chuàng)世區(qū)塊
這步操作跟上章講的步驟一樣莉钙,注意genesis.json的內(nèi)容跟前面的一模一樣,文件結(jié)構(gòu)如下:提示:
你可以按照個人喜歡把文件放在其它地方停忿,初始化和啟動節(jié)點(diǎn)的時(shí)候需要跟上完整的路徑
初始化創(chuàng)世區(qū)塊
geth --datadir d:\ethprivatechain\data init d:\ethprivatechain\genesis.json
啟動節(jié)點(diǎn)
1.進(jìn)入geth
控制臺
geth --datadir d:\ethprivatechain\data --networkid 100 console
為了區(qū)分操作蚊伞,我的兩臺電腦mac為節(jié)點(diǎn)1,win為節(jié)點(diǎn)2氧枣,mac和win上先后啟動geth
2.mac
上獲取節(jié)點(diǎn)的enode信息
> admin.nodeInfo.enode
//輸出信息
"enode://e08f44fbedfd17b549a5237ebe7548501a891f34859cd71fdf083d99e8de2763902967af54f67423ac632648904674ffa86d7fa6fccee649a992b4942f424b17@[::]:30303"
3.在win
的節(jié)點(diǎn)上添加第一個節(jié)點(diǎn)的操作
> admin.addPeer("enode://e08f44fbedfd17b549a5237ebe7548501a891f34859cd71fdf083d9
9e8de2763902967af54f67423ac632648904674ffa86d7fa6fccee649a992b4942f424b17@192.16
8.111.20:30303")
//輸出信息
true
注意:enode信息中的[::]替換成第一個節(jié)點(diǎn)的ip别垮,問號及后面部分不需要
4.查看連接的節(jié)點(diǎn)
//查看連接的節(jié)點(diǎn)數(shù)量,此處為1
> net.peerCount
1
// 查看連接的節(jié)點(diǎn)信息
> admin.peers
[{
caps: ["eth/63"],
id: "e08f44fbedfd17b549a5237ebe7548501a891f34859cd71fdf083d99e8de2763902967a
f54f67423ac632648904674ffa86d7fa6fccee649a992b4942f424b17",
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: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa
3",
version: 63
}
}
}]
節(jié)點(diǎn)1和節(jié)點(diǎn)2都可以進(jìn)行挖礦,并且只要有一個節(jié)點(diǎn)在進(jìn)行挖礦烧董,其他節(jié)點(diǎn)的交易也都能正常進(jìn)行。