Ethereum私有鏈搭建

1. 環境準備

2. 開始搭建

2.1 準備創世區塊文件

每一條區塊鏈都有一個創世塊。當你第一次用geth的默認參數運行一個節點的時候,ethereum主網的創世塊就會同步到你本地的數據庫。對于私有鏈,我們通常用一個自定義的創世塊,將下面的代碼保存至D:\privatechain\genesis.json文件。

{
  "config": {
    "chainID": 1024,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x0400",
  "extraData": "0x00",
  "gasLimit": "0x8000000",
  "nonce": "0xdeadbeefdeadbeef",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

2.2 創建創世塊

下面要用上面的genesis.json創建一個創世塊。進入D:\privatechain工作空間,運行下面的命令:

geth --datadir "D:\\privatechain\\book_sharing" init genesis.json

以后就用上面的數據庫文件夾啟動節點。

2.3 啟動bootnode

2.3.1 什么是bootnode?

bootnode簡化了Ethereum客戶端實現,它只參與網絡節點發現協議,但不運行任何高級應用程序協議。它可以用作輕量級的引導節點,以幫助在私有網絡中找到對等點。
總而言之,就是一個用于節點發現或者說節點引導的輕量節點,方便聯盟鏈的搭建~

bootnode的可執行文件和geth處于同一目錄下,前面配置了系統環境變量的話就可以全局用bootnode命令了。

2.3.2 啟動bootnode

先生成一個key,生成之后下次啟動bootnode就不用再特意生成key了,直接用已有的key

bootnode --genkey=boot.key

然后指定nodekey來啟動bootnode:

bootnode --nodekey=boot.key

上面的命令運行完,會打印出類似下面的log:

INFO [03-17|13:40:29] UDP listener up                          self=enode://b4c360879ca11b222ac910136f3fbd3939a376b346aad1fdf1f825bd35864835f163290957b68aab95888916dcba43cafa74809a56b2373a467cc1ac562f6ff9@0.0.0.0:30301

encode后面的這么一長串東西,就是這個節點的ID信息,下面啟動geth節點的時候要指定連接這個bootnode~

2.4 啟動節點

geth --identity "richard" --rpc --rpcport "8545" --datadir book_sharing --port "30303"  --bootnodes "enode://b4c360879ca11b222ac910136f3fbd3939a376b346aad1fdf1f825bd35864835f163290957b68aab95888916dcba43cafa74809a56b2373a467cc1ac562f6ff9@10.222.49.22:30301" --networkid="1024" --rpccorsdomain="*" console 2>>richard.log

注意到,我們把bootnode里面的0.0.0.0改成了bootnode所在機器的IP地址,如果其他機子要起節點的時候才能找到我們起的bootnode。

上面的命令的主體是geth console,這個命令就啟動了一個節點并進入到它的交互模式,可以調用相應的API查看這條私鏈上的所有信息。輸入exit命令,退出且節點就不再運行。下面嘗試解釋一下其他參數的含義,具體可以運行geth --help查看。

選項 解釋
identity 自定義節點的名字,方便節點中互相辨認識別
rpc 啟用HTTP-RPC服務器
rpcport HTTP-RPC服務器監聽端口(默認值:8545)
datadir 數據庫目錄
port 網絡監聽端口(默認值:30303)
bootnodes 逗號分隔的enode url,用于P2P發現引導
networkid 網絡標識符(整型, 1=Frontier, 2=Morden (棄用), 3=Ropsten, 4=Rinkeby) (默認: 1)
rpccorsdomain 允許跨域請求的域名列表(逗號分隔),這里的*允許所有主機連接,不建議這么寫,可以指定具體例如:http://10.222.49.22:3000, http://10.222.49.22:3001

2.5 加入已有私鏈(組成聯盟鏈)

如果有已知節點在跑著了,我們想加進去它所在的網絡,那該怎么辦?首先明確一點:

Connections between nodes are valid only if peers have identical protocol version and network ID. 節點間要建立有效連接,當且僅當節點間有著相同版本的協議和網絡ID。

問題來了,怎么查看節點的協議版本和網絡ID?在節點交互模式中, 輸入下面命令:

admin.nodeInfo.protocols

可以看到輸出:

{
  eth: {
    difficulty: 381952414,
    genesis: "0xb240e0678c2a8f87cf350225b528e3d97688aad6d4d84ee84e405c7fc9e37e4e",
    head: "0xaef4be11304786d60302570aa2c53bb5b5bea21b6204a6f52d9bcfb618e66811",
    network: 1024
  }
}

其中networkid是我們啟動節點的時候參數--networkid=1024指定的,那genesis和head怎么指定呢?答案就是:使用相同的genesis.json文件初始化區塊鏈!

所以,要想加入已有私鏈,首先拿到同樣的genesis.json創建創世塊,然后使用相同的networkid啟動節點。

當準備好相同的創世塊,就可以申請加入已有網絡啦。這里列舉兩種方式:

    1. 通過指定相同的bootnode:
geth --identity "richard1" --rpc --rpcport "8545" --datadir book_sharing --port "30303"  --bootnodes "enode://b4c360879ca11b222ac910136f3fbd3939a376b346aad1fdf1f825bd35864835f163290957b68aab95888916dcba43cafa74809a56b2373a467cc1ac562f6ff9@10.222.49.22:30301" --networkid="1024" --rpccorsdomain="*" console 2>>richard1.log

這樣就可以和其他節點建立連接啦。起來之后,可以通過命令net.peerCount查看已經建立連接的節點數。要查看更具體的節點連接信息,可以輸入:

admin.peers

結果:

[{
    caps: ["eth/62", "eth/63"],
    id: "c9c20dca4374f3605a2015dd53fbddd1ebacfb13c124870971b767a972b4970342a339818cb5affed25321261126b6936c39437df96978cb3bef3305d8d481e0",
    name: "Geth/richard1/v1.7.3-stable-4bb3c89d/windows-amd64/go1.9",
    network: {
      localAddress: "10.222.49.22:30304",
      remoteAddress: "10.222.49.22:49469"
    },
    protocols: {
      eth: {
        difficulty: 381952414,
        head: "0xaef4be11304786d60302570aa2c53bb5b5bea21b6204a6f52d9bcfb618e66811",
        version: 63
      }
    }
}]

可以看到打印出一個長度為1數組,里面是節點的具體信息。

    1. 手動添加節點

首先,要得到你準備要握手的節點的信息:

admin.nodeInfo.enode

結果:

enode://d2376964a9e24afec972d9b694dcf3574b171a1517b486532ee7b9e488503f46f97b6c1cc6bf55c9309ceab4fa7bb05427e7a213bb3efa43beeac5dae580ae12@0.0.0.0:30304

把0.0.0.0改成對方的真實IP,然后回到我們自己的節點手動添加:

admin.addPeer("enode://d2376964a9e24afec972d9b694dcf3574b171a1517b486532ee7b9e488503f46f97b6c1cc6bf55c9309ceab4fa7bb05427e7a213bb3efa43beeac5dae580ae12@0.0.0.0:30303");

再輸入admin.peers確認是否添加成功。
完成后,任意一個節點挖礦miner.start(),另一個節點都會同步。可以通過eth.blockNumber查看區塊鏈上的區塊數量。要停止挖礦,miner.stop()

至此,搭建完畢!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容