區塊鏈技術,搭建一個私有區塊鏈環境

雖然以太坊是一個公有鏈系統,但是我們可以通過設置一些參數來運行自己的私有鏈節點,在自己的私有鏈上進行開發和測試不需要同步公有鏈數據,也不需要花錢來買以太幣,節省存儲空間和成本,而且很靈活很方便。本文介紹使用geth客戶端搭建私有鏈的操作步驟,同時會解釋在這個過程中用到的各個命令及選項的含義和作用,最後會介紹geth的Javascript Console中的一些常用功能。


環境:Ubuntu14.04

一、安裝geth

安裝方式有兩種:

1、使用源碼安裝,自己用go語言進行編譯;

2、使用Personal Package Archives實現安裝(推薦,比較簡單嘛),命令如下:

  1. sudo apt-get install software-properties-common

  2. sudo add-apt-repository -y ppa:ethereum/ethereum

  3. sudo apt-get update

  4. sudo apt-get install ethereum

二、準備創世區塊配置文件

1、以太坊支持自定義創世區塊,要運行私有鏈,我們就需要定義自己的創世區塊,創世區塊信息寫在一個JSON格式的配置文件中。我們將下面的內容保存到一個JSON文件中,例如genesis.json。

{

"config": {

"chainId": 10,

"homesteadBlock": 0,

"eip155Block": 0,

"eip158Block": 0

},

"alloc" : {},

"coinbase" : "0x0000000000000000000000000000000000000000",

"difficulty" : "0x02000000",

"extraData" : "",

"gasLimit" : "0x2fefd8",

"nonce" : "0x0000000000000042",

"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

"timestamp" : "0x00"

}

例如我在root/data0目錄新建genesis.json文件,將上面的內容粘貼到genesis.json文件中,然後保存,如圖:

區塊鏈技術,搭建一個私有區塊鏈環境

2、準備好創世區塊文件後,我們需要初始化區塊鏈,將創世區塊的信息寫入到區塊鏈中,在這裡我們新建一個目錄用來存放區塊鏈數據;例如我的目錄在/root/data0下,那麼就進入到data0目錄下進行初始化;命令為:geth –datadir data0 init genesis.json

注意:執行此命令後可能會出現錯誤導致無法正常初始化,常見的錯誤如下:

Fatal: invalid genesis file: missing 0x prefix for hex data:這個錯誤信息意思很明白,就是你的json文件中,對於16進制數據,需要加上0x前綴

Fatal: invalid genesis file: hex string has odd length: 從v1.6開始,設置的十六進制數值,不能是奇數位, 比如不能是0x0,而應該是0x00。

Fatal: failed to write genesis block: genesis has no chain configuration :這個錯誤信息,就是說,你的json文件中,缺少config部分。看到這個信息,我們不需要把geth退回到v1.5版本,而是需要加上config部分。

Error: invalid sender undefined: 這個錯誤不會導致初始化失敗,但是會在以後的轉賬(eth.sendTransaction),或者部署智能合約的時候產生。解決方法就是chainId 不能設置為0。 如果你完全按照github上給的官方配置文件,就會產生這個錯誤。

3、出現此提示,表示初始化完成。

區塊鏈技術,搭建一個私有區塊鏈環境

上面的命令的主體是geth init,表示初始化區塊鏈,命令可以帶有選項和參數,其中–datadir選項後面跟一個目錄名,這裡為data0,表示指定數據存放目錄為data0,genesis.json是init命令的參數。

運行上面的命令,會讀取genesis.json文件,根據其中的內容,將創世區塊寫入到區塊鏈中。如果看到以下的輸出內容,說明初始化成功了。

4、初始化成功後,會在數據目錄data0中生成geth和keystore兩個文件夾,此時目錄結構如下:其中geth/chaindata中存放的是區塊數據,keystore中存放的是賬戶數據。

區塊鏈技術,搭建一個私有區塊鏈環境

三、啟動私有鏈節點

初始化完成後,就有了一條自己的私有鏈,之後就可以啟動自己的私有鏈節點並做一些操作,在終端中輸入以下命令即可啟動節點:

geth –datadir data0 –networkid 1108 console

上面命令的主體是geth console,表示啟動節點並進入交互式控制檯,–datadir選項指定使用data0作為數據目錄,–networkid選項後面跟一個數字,這裡是1108,表示指定這個私有鏈的網絡id為1108。網絡id在連接到其他節點的時候會用到,以太坊公網的網絡id是1,為了不與公有鏈網絡衝突,運行私有鏈節點的時候要指定自己的網絡id。

區塊鏈技術,搭建一個私有區塊鏈環境

運行上面的命令後,就啟動了區塊鏈節點並進入了Javascript Console:

到此以太坊私有區塊鏈環境搭建結束。

這是一個交互式的Javascript執行環境,在這裡面可以執行Javascript代碼,其中>是命令提示符。在這個環境裡也內置了一些用來操作以太坊的Javascript對象,可以直接使用這些對象。這些對象主要包括:

eth:包含一些跟操作區塊鏈相關的方法

net:包含以下查看p2p網絡狀態的方法

admin:包含一些與管理節點相關的方法

miner:包含啟動&停止挖礦的一些方法

personal:主要包含一些管理賬戶的方法

txpool:包含一些查看交易內存池的方法

web3:包含了以上對象,還包含一些單位換算的方法

進入以太坊Javascript Console後,就可以使用裡面的內置對象做一些操作,這些內置對象提供的功能很豐富,比如查看區塊和交易、創建賬戶、挖礦、發送交易、部署智能合約等。 後面小編會繼續介紹幾個常用功能!


分享到:


相關文章: