基於windows 10 的以太坊多節點構建和並聯

左良發表於2017-12-12

前言

這篇文章可能是最簡單的內容,基於前一篇我們講到的節點互聯,我們在這一章將其運用起來。為什麼選擇win10系統,因為geth實際上並不很調系統,都可以執行,然後很多教程都是linux下的我就寫一篇關於windows下的節點構建和並聯吧。

環境準備

  • windows 10 (非必須)
  • geth 1.7.3
  • 創世檔案 init.json

geth下載地址:

節點構建

本次構建使用到的創世檔案:

{
"nonce": "0x0000000000000075",
    "config": {
        "chainId": 4567,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData": "0x00",
  "gasLimit": "0xffffffff",
  "difficulty": "0x400",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {     }
}
複製程式碼

和之前文章一樣我們需要使用初始化資料夾命令來初始化datadir不過這次我們初始化兩個目錄

geth init init.json --datadir ./demo1

geth init init.json --datadir ./demo

之所以初始化兩次是因為前面文章提到,為了讓私鏈的多個節點互聯,前提就是保證每一個節點的創世檔案相同,否則無法互聯。

節點啟動

我們先啟動主要節點,並開啟json RPC服務

geth --identity "prcService" --rpc --rpccorsdomain "*" --datadir ./demo --port "30301" --nodiscover --rpcport 8101 --rpcapi "personal,db,eth,net,web3" --networkid 1998 console 2>> ./geth.log

這裡標記的--networkid一定要保證和另一個啟動的節點一致。

在啟動第二個礦工節點前,我們先複習一下上一章講到的通過命令列建立賬戶的命令:

geth account new --datadir ./demo1

輸入兩次賬戶密碼,就會在剛剛建立的demo1中新建一個賬戶,之所以建立一個賬戶是為了挖礦需要,啟動挖礦必須指定一個賬戶否則無法啟動挖礦。

然後我們再啟動挖礦節點:

geth --datadir ./demo1 --nodiscover --ipcdisable --mine --networkid 1998 --minerthreads=4 console 2>> ./geth1.log

解釋下幾個不同的引數:

--ipcdisable 表示啟動節點時關閉檔案rpc服務,因為windows下的prc是預設放在同一個檔案下,導致多節點啟動時無法啟動並報錯:Fatal: Error starting protocol stack: Access is denied. 解決辦法就是新增這個引數關閉這個節點的rpc服務。

--mine 表示啟動節點就開始挖礦工作,所以之前我們需要建立一個賬戶,沒有賬戶然後又新增了這個引數會報錯然後無法啟動。

--minerthreads=4 表示啟動挖礦的執行緒數。

再次提醒一定要保證networkid一致。

節點互聯

在保證networkid一致,創世檔案一致的情況下,我們可以使用多種方法來互聯節點,這裡我們就演示最簡單的通過控制檯互聯節點。

在demo中輸入

admin.nodeInfo 得到節點的連結地址:

{
  enode: "enode://000b59e137591a1a4c4b361df824d3f1ce4b872c0b4499d790913dfc8dfb57d97a311a26881cb45a0267d8c0b2a58565cb9bb02aa6a9ca31b7eab64aa3bf4e50@[::]:3031?discport=0",
  id: "000b59e137591a1a4c4b361df824d3f1ce4b872c0b4499d790913dfc8dfb57d97a311a26881cb45a0267d8c0b2a58565cb9bb02aa6a9ca31b7eab64aa3bf4e50",
  ip: "::",
  listenAddr: "[::]:3031",
  name: "Geth/v1.7.2-stable-1db4ecdc/windows-amd64/go1.9",
  ports: {
    discovery: 0,
    listener: 3031
  },
  protocols: {
    eth: {
      difficulty: 88872041,
      genesis: "0xc9400712dce394e4bb9019f317751286cdf4f594ebad0a5acf83162a373461d3",
      head: "0x62b39a9a3d9d2b3a79ea2d6648b63b0b63baa9f51f8b34987a52da9e8222bcef",
      network: 11
    }
  }
}
複製程式碼

然後將enode內容複製,在demo1中輸入admin.addPeer(內容)新增節點,新增之後可以通過admin.peers命令檢視到新增的節點

圖片

可以試試在兩個節點輸入admin.peers都可以檢視到連線資訊

來自本人: 以太坊極客

相關文章