以太坊單節點私鏈搭建(go+geth+Etherum Wallet)
前言:
geth和Etherum Wallet是個什麼東西呢?
簡單說,是以太坊客戶端。以太坊客戶端主要分成兩類。
第一類:後臺命令列客戶端。
如:geth(go語言),parity(Rust語言),他們是一個與以太坊網路互動的命令列客戶端。
另外的命令列客戶端還有 ethereumjs-lib(javascript),pyethapp(python),ruby-ethereum(ruby),其中geth 使用的比較普遍。
第二類:視覺化錢包。
Etherum Wallet 是屬於視覺化錢包,提供介面展示,更為直觀。我們在geth 客戶端中生成的使用者,以太坊幣數量可以通過Etherum Wallet 錢包視覺化展示。當然Etherum Wallet 不只有這些簡單的功能,最重要的是能部署智慧合約,釋出,呼叫。其他還有很多輕錢包,如 lightWallet,metamask等
一:環境說明
1.ubuntu16.04 64位
2.golang (1.10.3)
3.geth (1.8.12)
4.Etherum Wallet (Etherum-Wallet-liunx64-0-11-1.zip)
二:安裝golang
geth依賴golang(版本不能低於1.7),
下載:https://golang.org/dl/
本文下載的是go1.10.3.liunx-amd64.tar.gz
下載後,解壓到/usr/local/目錄
> tar -C /usr/local/ -xvf go1.10.3.linux-amd64.tar.gz
新增環境變數:
> vi /etc/profile
在開啟的檔案profile中追加內容:
#golang
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOARCH=amd64 # 注意這個坑
坑描述:
跨平臺交叉編譯涉及兩個重要的環境變數:GOOS和GOARCH,分別代表Target Host OS和Target Host ARCH,如果沒有顯式設定這些環境變數,我們通過go env可以看到go編譯器眼中這兩個環境變數的當前值:
> go env
GOARCH 為386 或者amd64。如果此項配置錯誤,在編譯安裝其他程式時會報錯:
go install: cannot install cross-compiled binaries when GOBIN is set
執行命令,使profile生效:
> source /etc/profile
golang安裝部署完成,測試:
> go version
go version go1.10.3 linux/amd64
編寫hello world程式,測試:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
儲存為hello.go
執行hello.go
> go run hello.go
Hello World!
三:安裝geth
> unzip go-ethereum-master.zip
> cd go-ethereum-master
> make all
在go-ethereum-master目錄下會生成build目錄,在build目錄下執行命令,檢視是否安裝成功:
> ./bin/geth help
將build資料夾移動到/usr/local/,並重命名為geth。
將geth配置到環境變數,在/etc/profile檔案中追加一下內容:
> mv ./build /usr/local/ETH/geth
> vi /etc/profile
...
#geth
export GETH_HOME=/usr/local/ETH/geth/bin
export PATH=$PATH:$GETH_HOME
...
> source /etc/profile
> geth help
...
四:安裝Etherum Wallet
注意:
此下載地址中有Etherum Wallet、Mist;ubuntu系統下,Mist連結私鏈後,賬戶能顯示,但不能做其他操作(原因未知),換用Etherum Wallet後,轉賬等可正常操作
下載後,解壓到/usr/local/ETH/mist目錄
直接執行etherumwallet檔案即可
將Etherum Wallet配置到環境變數,在/etc/profile檔案中追加一下內容:
> vi /etc/profile
...
#Etherum Wallet
export EW_HOME=/usr/local/ETH/EtherumWallet/
export PATH=$PATH:$EW_HOME
...
> source /etc/profile
> etherumwallet
...
五:創世塊
5.1建立創世塊檔案
新建檔案genesis.json,內容如下
{
"config": {
"chainId": 101,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x400",
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
引數說明:
chainId : 以太坊區塊鏈網路Id,ethereum主鏈是1,私有鏈只用不要與主鏈衝突即可。
alloc : 預留賬戶,如下
“alloc”:{
“0x0000000000000000000000000000000000000001”:{“balance”:”121312321”},
“0x0000000000000000000000000000000000000002”:{“balance”:”121312321”},
}
Coinbase: 曠工賬戶
Difficulty: 挖礦難度,0x400,這個是簡單。
extraData:相當於備註
gasLimit:最小消耗gas
nonce : 64位隨機數,用於挖礦,注意他和mixhash的設定需要滿足以太坊黃皮書中的要求
parentHash : 上一個區塊的Hash值,因為是創世塊,石頭裡蹦出來的,沒有在它前面的,所以是0
Timestamp : 時間戳
5.2初始化創世塊
在桌面新建目錄EthDBSpace,執行初始化命令:
> cd ~/Desktop
> mkdir EthDBSpace
> geth --datadir EthDBSpace init genesis.json # genesis.json檔案在桌面
注意:
記得去檢視下EthDBSpace資料夾下的檔案變化
六、挖礦
6.1啟動geth客戶端節點
簡潔點的命令:
> geth --datadir ./ console # ./是你之前建立的EthDBSpace資料夾地址
執行命令後的螢幕輸出:
複雜點的命令:
> geth --identity node1 --datadir ./EthDBSpace --rpc
--rpcapi db,eth,net,web3 --rpcaddr 127.0.0.1
--rpcport 8481 --port 30301 --networkid 29381 console
使用命令 geth -h 可以檢視geth 相關的幫助文件。這裡我說幾個常用的屬性。
- -Identity : 節點身份標識,起個名字
- -datadir : 指定節點存在位置,“data0”
- -rpc : 啟用http-rpc伺服器
- -rpcapi : 基於http-rpc提供的api介面。eth,net,web3,db…
- -rpcaddr : http-rpc伺服器介面地址:預設“127.0.0.1”
- -rpcport : http-rpc 埠(多節點時,不要重複)
- -port : 節點埠號(多節點時,不要重複)
- -networkid : 網路識別符號 隨便指定一個id(確保多節點是統一網路,保持一致)
6.2建立賬戶、開啟挖礦
執行6.1命令後,會進入命令列,在命令列下,建立賬戶,並啟動挖礦:
> personal.newAccount("123456")
> miner.start()
挖到新區塊如下圖:
其他geth常用命令:
1.建立賬戶(可建立多個)
> personal.newAccount("123456")
2.獲取賬戶陣列
> eth.accounts
3.解鎖賬戶,轉賬時可使用
> personal.unlockAccount(eth.accounts[0], "123456")
4.節點主賬戶
> eth.coinbase
5.檢視賬戶餘額
> eth.getBalance(eth.accounts[0])
6.啟動,結束挖礦,寫區塊
> miner.start()
> ...
> miner.stop()
七:Etherum Wallet連線私鏈
在執行6.1命令時,最後一行列印的是url,即geth.ipc檔案路徑,在這裡會用到:
開啟新的終端,執行Etherum Wallet啟動命令:
> ethereumwallet --rpc geth.ipc檔案路徑
Etherum Walle啟動後的介面:(我這裡建立了3個賬戶)
八:使用Etherum Wallet轉賬
選中某個賬戶,點選Etherum Wallet上方的“SEND”,進入轉賬介面,填入收款賬戶,提交即可。
注:
開啟挖礦,才能轉出成功。
如果你的Etherum Wallet中某個賬戶一直顯示沒有收到賬款,可以嘗試重啟下Etherum Wallet。
複製賬戶快捷方式:
注:
Transfer Ether & Tokens 為收款功能