CentOS7搭建以太坊私有鏈
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搭建以太坊私有鏈