要求:
在Ubuntu平台搭建以太坊私有鏈,並進行挖礦
1、安裝go語言環境
(1)下載Linux下go的安裝包
wget https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz

(2)下載完后,進入到下載目錄,將其解壓到 /usr/local 文件夾下
sudo tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz

在HOME下創建文件夾go

(3)配置環境變量
使用sudo vi ~/.bashrc命令編輯bashrc文件。

將以下命令放入到bashrc文件中
export G0ROOT=/usr/1ocal/go export GOBIN=$GOROOT/bin export GOPATH=$HOME/go export PATH=$PATH:$GOBIN

使得環境變量生效

此時go語言環境已經安裝完成,輸入go version查看安裝成功

安裝geth環境
依次輸入以下代碼
sudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo add-apt-repository -y ppa:ethereum/ethereum-dev sudo apt-get update sudo apt-get install ethereum






輸入geth -h檢查以下版本,說明geth客戶端安裝成功!
2、安裝以太坊客戶端Ethereum
(1)新建一個文件夾,例如mydata,用來保存私有鏈的數據。創建一個初始化的創世塊文件genesis.json


然后將如下的配置信息寫入到創世塊文件genesis.json中
{ "nonce": "0x0000000000000042", "difficulty": "0x40000", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "timestamp": "0x00", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", "gasLimit": "0xffffffff", "alloc": { "3282791d6fd713f1e94f4bfd565eaa78b3a0599d": { "balance": "1337000000000000000000" }, "17961d633bcf20a7b029a7d94b7df4da2ec5427f": { "balance": "229427000000000000000" } }, "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 } }
保存退出

(2)初始化創世區塊,並指定數據存放路徑


這里我用的老師給的創世區塊發現是錯誤的。
這里我將創世區塊換成以下內容:
{
"config": {
"chainId": 666,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"ethash": {}
},
"nonce": "0x0",
"timestamp": "0x5ddf8f3e",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x00002",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": { },
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
編輯genesis.json保存並退出

現在正式開始初始化創世區塊,並指定數據存放路徑,這里放在我們剛剛建的文件夾mydata下

(3)啟動私有鏈節點,並將日志輸入到mychain.log
geth --networkid 3 --datadir mydata --identity "mychain" --rpc --rpcaddr 0.0.0.0 --rpcport 8545 --rpcapi "admin,debug,eth,miner,net,personal,shh,txpool,web3" --port 30303 --rpccorsdomain "*" --nodiscover console 2>>mychain.log

以太坊私有鏈環境已經搭好,接下在進行簡單測試。
首先這里說一下,其實我這是第二次挖礦了,第一次開始挖礦都會返回null,其實是因為節點版本問題。 所以接下來我重新啟動私有鏈節點,在啟動geth命令行的時候需要添加這兩個參數:
geth --datadir "./ethdev" --nodiscover console 2>>get.log --dev --dev. period 1 #添加--dev 參數,啟動的時候便產生了一個賬戶,並且已經挖礦有余額。

4、測試
(1)創建新賬戶
創建新用戶之前查看當前賬戶

這里是因為我們添加-dev參數后就會自動添加一個賬戶,並且這個賬戶是有挖礦余額的。

接下來開始創建我們需要挖礦的賬戶
personal.newAccount("xixi1") #這里的xixi1是賬戶的密碼
創建成功將返回賬戶的地址

(2)查找已創建的賬戶
> eth.accounts
> personal.listAccounts #兩者都可以查詢到已經創建的賬戶

(3)查詢賬戶余額
eth.getBalance("賬戶地址")
這里查找我創建的第一個賬戶的余額,引號內輸入密碼為xixi1對應的賬戶地址0xc0fac76bfe99f3e68cdd630bd02e180560b6c7ba。

可以看到顯示的是0,是因為我們還沒有開始挖礦,所以沒有余額。
#這里我將第一個用戶設置成user1,第二個用戶設置成user2,以便於后面好操作,不然老是去輸入用戶的地址很麻煩。

接下來直接可查詢user1和user2賬戶余額

(4)開始挖礦
在挖礦前,先設置挖礦獎勵地址(如果不設置的話默認獎勵地址為第一個用戶)
miner.setEtherbase(eth.accounts[0]) #這里的0是指的第一個賬戶,那么第二個賬戶就是1

可以看到顯示true,說明第二個賬戶存在。
再查詢一下獎勵的地址
eth.coinbase

可以看到正是我們第二個賬戶。
設置成功后,我們就開始挖礦,調大虛擬機內存,我這里設置的是4g。

其實在這之前我每次開始挖礦都會返回null,其實是因為節點版本問題。在啟動geth命令行的時候需要添加這兩個參數。
在dev環境下驗證發現,當執行miner.start()時,返回null。但其實miner已經執行,只不過它在等待你發送交易之后才會生成新的區塊。也就是說執行了miner.start(),它一直在等待,這是發送一筆交易,再查看區塊高度發現已經增加一塊。

雖然miner.start 還是返回null,但是 eth.blockNumber 卻增長了,因此說明可以挖礦了。
(5)轉移以太幣
目的:將0.01以太幣從 user1 轉移到user2 轉移數量為0.01以太幣
amount = web3.toWei(0.01) #首先需要設置轉移的以太幣數量amount
eth.sendTransaction({from:user1,to:user2,value:amount}) #將0.01以太幣從 user1 轉移到user2 轉移數量為0.01以太幣

現在查詢user2的余額,發現不是0了!

注意:如果這里查詢到user2還是沒有余額,就說明沒有進行挖礦操作,以致於交易未成功。需要miner.start()開始挖礦,再查詢下區塊高度即可。挖礦之后就會有余額啦。

再次轉移,可以看到user2余額發生變化

