1. 程式人生 > >以太坊上搭建自己的私有鏈

以太坊上搭建自己的私有鏈

  首先介紹一下什麼是公有鏈和私有鏈

公有鏈:世界上任何一個人都可以參與的區塊鏈。使用者可以檢視,可以傳送交易,也可以參與保持資料一致性的運算等。

私有鏈:完全的私有鏈是指寫許可權是由一個人或一個單個組織控制的鏈。私有鏈的讀許可權是可以公開的或者是有限度的在一定範圍公開的。比如私有鏈可以用在資料庫的管理,公司內部的管理等。

聯盟鏈:聯盟鏈是指,資料一致性的運算被預先設定好的幾個節點共同控制的鏈。比如,有15家銀行組成了一個財團鏈,在這個鏈上的每一個節點的每一次的操作都需要10個節點的共同簽名才能被驗證。這區快鏈上的讀許可權可能是公開的,也有可能是部分公開的。

這genesis(創世)區塊是區塊鏈的起點,是它的第一塊區塊,0號區塊,唯一一個沒有前任的區塊。這個協議確保了沒有其他節點會和你的節點的區塊鏈版本一致,除非它們的創世區塊和你的一模一樣。通過這種方法,你就可以建立任意多的私有區塊鏈。

如:CustomGenesis.json
{

    "nonce": "0x0000000000000042",  

   "timestamp": "0x0",

 "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",

    "extraData": "0x0", 

    "gasLimit": "0x8000000",   

    "difficulty": "0x400",

"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",

    "coinbase": "0x3333333333333333333333333333333333333333",  

   "alloc": {     }

}

Mix hash
一個256位的雜湊值,和nonce配合,一起用來證明在區塊鏈上已經做了足夠的計算量(工作證明)。這個nonce 和 mixhash 的組成,必須滿足一個在黃皮書中所描述的數學上的條件,黃皮書 4.3.4。
Nonce
一個64位的雜湊值,和mixhash配合,一起用來證明在區塊鏈上已經做了足夠的計算量(工作證明)
Difficulty
定義挖礦的目標,可以用上一個區塊的難度值和時間戳計算出來,值越高,礦工越難挖到區塊
Alloc 預先填入一些錢包和餘額
Coinbase
160位的錢包地址。在創世區塊中可以被定義成任何的地址,因為當每挖到一個區塊的時候,這個值會變成礦工的etherbase地址
Timestamp  一個unix的time()函式的輸出值,時間戳
extraData  32位元組長度,可以為私有鏈留下一些資訊,如你的姓名等,用以證明這個私有鏈是你建立的

gasLimit   當前鏈,一個區塊所能消耗的gas上限

建立私有鏈中用到的命令列引數

--nodiscover
新增這個引數,確保沒有人能發現你的節點。不然的話,可能有人無意中會連結到你的私有區塊鏈。

--maxpeers 0

使用maxpeers 0,如果你不希望其他人連線到您的測試鏈。當然,您也可以調整這個數,如果你知道有多少同伴會連線你的節點

--rpc

在你的節點上啟用RPC介面。這引數在geth中預設啟用。

--rpcapi "db,eth,net,web3"

這個命令描述哪些介面可以通過RPC來訪問,預設情況下,geth開啟的是web3介面。

--rpcport "8080"

將埠號設定成8000以上的任何一個你網路中開啟的埠。預設是8080。

--rpccorsdomain http://chriseth.github.io/browser-solidity/

設定可以連線到你的節點的url地址,以執行RPC客戶端的任務。最好不要使用萬用字元 * ,這樣將允許任何url都可以連結到你的RPC例項。

--datadir "/home/TestChain1"

私有鏈的資料目錄,確保與公共以太坊鏈的資料目錄區分開來。

--port "30303"

這是“網路監聽的埠”,您可以用它手動的和你的同伴相連。

--identity "TestnetMainNode"

為你的節點設定一個ID。用於和你們的一系列同伴進行區分。

接下來來建立自己的私有鏈

用cmd開啟命令列

建立上面的創世區塊檔案CustomGenesis.json,並把內容paste進去,如:

然後建立自己的目錄檔案,如:F:\chains\TestChain3 ,然後需要在此檔案裡再建立一個chaindata的子資料夾,把建立的創世區塊檔案CustomGenesis.json放進去裡面。然後在cmd指令中,輸入

geth --identity "mydev" --rpc --rpccorsdomain "*" --datadir "F:\chains\TestChain3\chaindata" --rpcapi "db,eth,net,web3,admin,miner,personal,rpc" --networkid 100 init "./CustomGenesis.json"

或者我們可以建立一個init.bat檔案,把上面的命令列語句放進去

輸入好後在命令列視窗上按回車執行,或者直接雙擊這個init.bat檔案,私有鏈就建立了。

然後,為了方便下次開啟私有鏈,我們再建立一個start.bat檔案,在裡面輸入

然後我們雙擊執行,出現

表示啟動成功,然後執行我們的Mist客戶端,出現

注意右上角有個PRIVATE-NET的標誌,表示是私有鏈,然後LAUNCH進去客戶端,我們就進入私有鏈了。

進去之後我們可以建立幾個新賬戶,

在 F:\chains\TestChain3\chaindata\keystore 上可以看到這些賬戶

然後來挖一下礦,在上面執行start.bat後的命令列視窗(注意執行時不要關閉),輸入miner.start(),其開始挖礦

就表示開始挖到礦了,返回我們的Mist客戶端,可以看到賬戶的以太幣數量不斷增加

我們可以在這個建立的這些賬戶之間進行以太幣交易操作,或者構建上一篇講的多重錢包簽名合約,但由於是在私有鏈上,所以要使交易執行完成,就要就是挖礦,將這些交易進行打包成區塊加入到區塊鏈上。

大家可以操作玩玩,這主要是在一臺主機上,下面再討論一下如何在兩臺主機加入到同一私有鏈中,然後進行交易操作。