1. 程式人生 > >CentOS7搭建以太坊私有鏈

CentOS7搭建以太坊私有鏈

系統版本 難度 adb alloc tab ffi web lB golang

1、 環境準備:Win10 64位安裝 VM VirtualBox,操作系統版本:

CentOS-7-x86_64-Everything-1611.iso(7.71G)。

切換root賬號,方便安裝程序

2、 安裝Golang 1.9以上版本,yum安裝的可以是1.8.3,所以要手動下載安裝

國內鏡像:https://studygolang.com/dl

#cd /usr
#wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64.tar.gz
# tar -C /root -xzf go1.10.1.linux-amd64.tar.gz
# cd /root; vi ~/.bashrc
export GOPATH
=/root/Go export GOROOT=/root/go export PATH=$PATH:$GOROOT/bin # source ~/.bashrc # go version go version go1.10.1 linux/amd64

3、 安裝go版本的以太坊源碼

#cd /usr
#git clone https://github.com/ethereum/go-ethereum
#cd go-ethereum
#make geth

4、 初始化一個創世區塊

初始化創世區塊時,要先創建一個genesis.json文件,utf-8編碼,內容如下:

{
  "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "coinbase" : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x40000",
    "extraData" : "",
    "gasLimit" : "0xffffffff",
    "nonce" : "0x0000000000000042",
    "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp" : "0x00",
    "alloc": { }
}

  

參數名稱

參數描述

mixhash

與nonce配合用於挖礦,由上一個區塊的一部分生成的hash。註意他和nonce的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。

nonce

nonce就是一個64位隨機數,用於挖礦,註意他和mixhash的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。

difficulty

設置當前區塊的難度,如果難度過大,cpu挖礦就很難,這裏設置較小難度

alloc

用來預置賬號以及賬號的以太幣數量,因為私有鏈挖礦比較容易,所以我們不需要預置有幣的賬號,需要的時候自己創建即可以。

coinbase

礦工的賬號,隨便填

timestamp

設置創世塊的時間戳

parentHash

上一個區塊的hash值,因為是創世塊,所以這個值是0

extraData

附加信息,隨便填,可以填你的個性信息

gasLimit

該值設置對GAS的消耗總量限制,用來限制區塊能包含的交易信息總和,因為我們是私有鏈,所以填最大。

  

接下來,我們使用geth init ./inti.json --datadir "./chain"命令,來進行創世區塊的初始化,當前區塊鏈網絡數據存放的位置會保存在chain目錄中:

#cd /usr/go-ethereum/bulid/bin
# ./geth  --datadir "./chain" init genesis.json

5、 啟用私有鏈

參數名稱

參數描述

datadir

設置當前區塊鏈網絡數據存放的位置

console

啟動命令行模式,可以在Geth中執行命令

nodiscover

私有鏈地址,不會被網上看到

使用以下命令,啟用私有鏈:

./geth --datadir "./chain" --nodiscover console 2>>eth_output.log

./geth   --datadir "./chain"   --nodiscover   console 2>>eth_output.log    

 在當前目錄執行tail -f eth_output.log,可以看到輸出日誌。

後面章節中的命令,都是在啟動私有鏈後的Geth javascript console中操作

6、 帳戶的添加和查看

查看帳戶,可以看到當前帳戶是空的

> web3.eth.accounts
[] 
 創建帳戶的方式有兩種,第一種創建帳戶時直接初始化密碼
> web3.personal.newAccount("123456")
"0x741d379e702f95ea8fdf96df9d8aa34e31b011e9"
"0xe0b0bf3b64e238814dede73eca9f16e51f386819" 

其中返回的0x741d379e702f95ea8fdf96df9d8aa34e31b011e9是帳戶,123456是帳戶的密碼

  
  第二種方法是先創建賬戶,然後輸入密碼

> web3.personal.newAccount()
Passphrase:
Repeat passphrase:
"0x3b0ec02b4193d14abdc9cc5b264b5e3f39624d70"

  這時我們再查看帳戶,能夠看到剛才創建的兩個帳戶已經存在了

> web3.eth.accounts
["0xbe323cc4fde114269a9513a27d3e985f82b9e25d", "0x3b0ec02b4193d14abdc9cc5b264b5e3f39624d70"] 

7、 用到的命令匯總:

./geth --datadir "./chain" --nodiscover console 2>>eth_output.log
web3.eth.accounts
web3.personal.newAccount("123456") 
miner.start(
1) //辦公電腦挖礦較慢 // miner.start(1) 返回 null時,執行以下2語句: eth.coinbase miner.setEtherbase(eth.coinbase) miner.stop() web3.eth.getBalance("0x741d379e702f95ea8fdf96df9d8aa34e31b011e9") acc0 = web3.eth.accounts[0] acc1 = web3.eth.accounts[1] acc2 = web3.eth.accounts[2] web3.eth.getBalance(acc0) web3.fromWei(web3.eth.getBalance(acc0))

8、 Linux命令

查看當前端口:netstat –ntlp

殺死指定進程:kill -9 pid

查看日誌:tail -f eth_output.log

9、 參考教程:http://www.cnblogs.com/lion.net/p/7809862.html

CentOS7搭建以太坊私有鏈