1. 程式人生 > >以太坊單節點私鏈搭建(go+geth+Etherum Wallet)

以太坊單節點私鏈搭建(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 為收款功能