Geth搭建私有鏈

WesleyWang97發表於2018-05-16

以太坊官方網路(Official Network)

以太坊官方網路有兩種:

  • 生產環境網路(又稱主網路)
  • 測試網路TestNet

主網路是產生真正有價值的以太幣的網路,是全球化,部署在Internet環境上的.智慧合約的程式碼,執行,區塊的呼叫,都可以清晰地檢視到.而所有節點都是全球化的,速度較慢.
TestNet是專供使用者來開發,除錯和測試的.如果開發簡單的智慧合約的話,用測試網路就足夠了,使用者可以把更多的精力集中在智慧合約的編寫.但是由於網路是官方提供的,因此對於以太坊技術的底層實現,Geth的各種引數介面,整個以太坊技術真是效能的理解就會弱很多.所以從開發者的角度來說,一個更好的選擇是Private Network,可以從技術的底層去深入理解以太坊.

以太坊私有網路(Private Network)

以太坊私有網路,就是由使用者自己通過Geth建立的私有網路,是一個非常適合開發,除錯和測試的網路.私有網路可以方便開發者深入理解以太坊的技術底層.

Geth搭建私有網路

Step1:定義私有genesis state

建立一個新的資料夾privateNetwork,用來儲存genesis.json檔案和之後的私有鏈

wesley@wesley-PC:~/Code/blockchain$ mkdir privateNetwork
wesley@wesley-PC:~/Code/blockchain$ cd privateNetwork
wesley@wesley-PC:~/Code/blockchain$ vim genesis.json

將下面的內容複製到genesis.json中:

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

官方文件中的chainId為0,應該修改為非0的值,不然會導致 insufficient funds for gas * price + value
difficulty表示挖礦的難度值,官方文件中為0x20000,由於測試機器配置低,修改為0x05000。

Step2:建立創世區塊

執行如下指令:

wesley@wesley-PC:~/Code/blockchain$ geth --datadir "./privateNetwork" init go-ethereum/genesis.json 

結果如下:

這裡寫圖片描述

然後在privateNetwork中能發現geth和keystore兩個新檔案.

  • geth儲存的是區塊鏈的相關資訊
  • keystore中儲存的是該鏈條中的使用者資訊

這裡寫圖片描述

Step3:建立自己的私有鏈條

執行如下命令:

wesley@wesley-PC:~/Code/blockchain/privateNetwork$geth --networkid 14 --nodiscover --datadir "data/chain0" --rpc --rpcapi net,eth,web3,personal --rpcaddr localhost console 2>>geth.log

nodiscover的意思是不被其他節點自動發現(可以手動新增節點)
console是啟動geth控制檯,不加該選項,geth啟動之後成為一個後臺程式不會自動結束
最後把geth中的log資訊匯入geth.log中,方便了解geth執行的情況。
注意路徑要加引號,不然會出問題.

--nodiscover 關閉p2p網路的自動發現,需要手動新增節點,這樣有利於我們隱藏私有網路
--datadir 區塊鏈資料儲存目錄
--networkid 網路標識,私有鏈取一個大於4的隨意的值
--rpc 啟用ipc服務,預設埠號8545
--rpcapi 表示可以通過ipc呼叫的物件
--rpcaddr ipc監聽地址,預設為127.0.0.1,只能本地訪問
console 開啟一個可互動的javascript環境
更多引數:https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options

這裡寫圖片描述

Step4:在自己的私有鏈條上建立使用者

檢視私有鏈已有賬戶,會發現返回為[],此時還沒有任何賬戶.

>eth.accounts

建立新使用者,密碼是”wesley”,地址是"0xe8280b532f5cc8d614e35fb5071d85250ccbd2a4"

>personal.newAccount("wesley")

這裡寫圖片描述

Step5:嘗試挖礦

繼續在console中輸入:

>miner.start()

開始挖礦,檢視geth.log,如下:

這裡寫圖片描述

過了一段時間之後,再停止挖礦,檢視賬戶,只要不為0則挖礦成功

這裡寫圖片描述

相關文章