搭建以太坊私鏈和私鏈集群

開發(fā)以太坊相關(guān)還是私鏈更方便。
本文為linux環(huán)境操作。windows環(huán)境需要自行修改目錄。

下載Geth

準(zhǔn)備

創(chuàng)建一個(gè)為私鏈專用的系統(tǒng)用戶:ethPrivate 在ethPrivate的home目錄操作。

步驟:

  1. 準(zhǔn)備一個(gè)創(chuàng)世塊文件genesis.json
  2. genesis.json初始化數(shù)據(jù)到一個(gè)目錄 node1
  3. node1中啟動(dòng)一個(gè)節(jié)點(diǎn)
  4. 在另一個(gè)目錄node2,重復(fù)2操作,來為另一個(gè)節(jié)點(diǎn)做初始化
  5. node2中啟動(dòng)另一個(gè)節(jié)點(diǎn)(端口號(hào)要區(qū)分開來)
  6. 重復(fù)4,5步驟來啟動(dòng)下一個(gè)節(jié)點(diǎn)
  7. 在啟動(dòng)的節(jié)點(diǎn)中添加其他節(jié)點(diǎn)

創(chuàng)世塊文件

創(chuàng)世塊文件用來初始化數(shù)據(jù),如果私鏈上的節(jié)點(diǎn)要互聯(lián)必須用同一個(gè)創(chuàng)世塊文件來初始化。

初始化之后,啟動(dòng)節(jié)點(diǎn)時(shí)不會(huì)再讀取該文件。

文件示例如下:/home/ethPrivate/genesis.json

{
    "config": {
            "chainId": 200,
            "homesteadBlock": 0,
            "eip155Block": 0,
            "eip158Block": 0
    },
    "coinbase" : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0xffffff",
    "extraData" : "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fb",
    "gasLimit" : "0xffffffff",
    "nonce" : "0x0000000000000000",
    "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp" : "0x00",
    "alloc": {
        "de1e758511a7c67e7db93d1c23c1060a21db4615":{"balance":"300000"},
        "27dc8de9e9a1cb673543bd5fce89e83af09e228f":{"balance":"500000"}
    }
}
key 說明
alloc 用來預(yù)置賬號(hào)以及賬號(hào)的以太幣數(shù)量。因?yàn)樗接墟溚诘V比較容易,所以不需要預(yù)置有幣的賬號(hào)。
nonce 生成的工作證明的散列。注意它和 mixhash 的設(shè)置需要滿足以太坊的 Yellow paper,4.3.4.Block Header Validity,(44)章節(jié)所描述的條件。
difficulty 設(shè)置當(dāng)前區(qū)塊的難度,如果難度過大,CPU 挖礦就越難,這里設(shè)置較小難度,方便 CPU 挖礦,十六進(jìn)制。
mixhash 與 nonce 配合用于挖礦,由上一個(gè)區(qū)塊的一部分生成的 hash。注意它和 nonce 的設(shè)置需要滿足以太坊的 Yellow paper,4.3.4.Block Header Validity,(44)章節(jié)所描述的條件。
coinbase 礦工的賬號(hào),可以在創(chuàng)建私鏈之前導(dǎo)入已經(jīng)創(chuàng)建好的賬號(hào)。
parentHash 上一個(gè)區(qū)塊的 hash 值,創(chuàng)始區(qū)塊沒有上一個(gè)區(qū)塊,所以設(shè)置為 0。
extraData 附加信息,可以填寫任意信息,已達(dá)到私有鏈的個(gè)性化,可以加入自己的名字等。
gasLimit 該值設(shè)置對(duì) GAS 的消耗總量限制,用來限制區(qū)塊能包含的交易信息總和,私有鏈可以設(shè)置為最大值。

如果創(chuàng)始?jí)K文件或者網(wǎng)絡(luò)id不一樣,節(jié)點(diǎn)無法互聯(lián)

挖礦難度

初始?jí)K的難度值決定整個(gè)鏈的速度.

difficulty值 十進(jìn)制 生成速度
2ffffd 3145725 一分鐘五到十個(gè)之間個(gè)
5ffffa 6291450 一分鐘五個(gè)
bffff4 12582900 六分鐘挖了八個(gè)
3bfffc4 62914500 六分鐘兩個(gè)
77fff88 125829000 十分鐘兩個(gè)
12bffed4 314572500 15分鐘沒有一個(gè)

搭建網(wǎng)絡(luò)

初始化和啟動(dòng)

#初始化兩個(gè)節(jié)點(diǎn)
geth --datadir /home/ethPrivate/node0 init genesis.json
geth --datadir /home/ethPrivate/node1 init genesis.json

#后臺(tái)啟動(dòng)第一個(gè)節(jié)點(diǎn),網(wǎng)絡(luò)id200,端口2001
nohup geth --datadir /home/ethPrivate/node0 --networkid 200 --port 2001 --nodiscover > /dev/null 2>&1 &
#后臺(tái)啟動(dòng)第二個(gè)節(jié)點(diǎn),網(wǎng)絡(luò)id200,端口2011,rpc端口2012
nohup geth --datadir /home/ethPrivate/node1 --networkid 200 --port 2011 --nodiscover > /dev/null 2>&1 &

添加節(jié)點(diǎn)

節(jié)點(diǎn)啟動(dòng)后可以通過ipc,rpc,websocket等方式與節(jié)點(diǎn)通信。在同一臺(tái)機(jī)器上一般使用geth 的ipc鏈接方式。不在同一臺(tái)機(jī)器則使用其他方式。

ipc鏈接后對(duì)節(jié)點(diǎn)的操作不受限制。其他方式則需要單獨(dú)開啟,并且可能需要對(duì)各種模塊的開放訪問限制。

#鏈接到第1個(gè)節(jié)點(diǎn)
geth attach ipc:/home/ethPrivate/node0/geth.ipc

#查看節(jié)點(diǎn)信息
> admin.nodeInfo.enode
"enode://07007...cf6fa@[::]:2001?discport=0"
> exit

#鏈接到第2個(gè)節(jié)點(diǎn)
geth attach ipc:/home/ethPrivate/node1/geth.ipc

#查看伙伴節(jié)點(diǎn)
> admin.peers
[]
#添加伙伴節(jié)點(diǎn)
> admin.addPeer('enode://07007...cf6fa@[::]:2001?discport=0')
true
#再次查看伙伴節(jié)點(diǎn)
> admin.peers

[{
    caps: ["eth/63"],
    id: "07007...cf6fa",
    name: "Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9.2",
    network: {
      localAddress: "[::1]:37098",
      remoteAddress: "[::1]:2001"
    },
    protocols: {
      eth: {
        difficulty: 6291450,
        head: "0x3358e132db6a144c73f09605055def2720dc954983aa40c046ba8ca735e9e9d2",
        version: 63
      }
    }
}]
> exit

私鏈網(wǎng)絡(luò)搭建完成。

原文查看自動(dòng)化啟動(dòng)腳本

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容