Win10以太坊私鏈多節點部署

                                Win10以太坊私鏈多節點部署


【前言】我覺得學習一個新的東西,最難的就是環境部署,部署好之後後續的開發工作就都是比較簡單的語法問題了。所以我這篇文章重點講述環境部署,部署成功的常規操作很容易查到的。雖然關於以太坊的部署的文章也很多,但是發現不夠細,或者其實運行不起來,或者寫的比較亂,所以才決定寫。

【摘要】在學習區塊鏈,看了很多論文,幾乎沒怎麼實踐。所以,想從以太坊部署、智能合約應用入手,熟練以太坊使用常規操作,後續再着手源碼研讀,可以包括以太坊、超級賬本。因爲覺得,論文看的再多,再怎麼明白道理,都不如讀源碼的體會來得更深、更細。所以這算是作爲新的進展計劃吧。

本篇文章主要是講解自己在部署以太坊的時候遇到的一些問題,以及對應的解決方法,希望給在這條路上的新手們寫個“踩雷執導”。

一、環境及工具

操作系統:Windows10

以太坊開發客戶端geth:

       版本:我下載的是1.9.1
              下載地址https://ethereum.github.io/go-ethereum/downloads/

geth:是Go Ethereum開源項目簡稱,是用於與以太坊網絡連接並進行相關開發的客戶端工具。使用Geth也可以搭建自己的以太坊私鏈、部署智能合約、挖礦、進行交易等等。(聯盟鏈搭建以後嘗試。)wiki裏爲使用文檔

以太坊錢包Ethereum Wallet:

     下載地址:https://github.com/ethereum/mist/releases/  

       注意:錢包要與geth版本相匹配,具體什麼版本,等錢包報錯的時候就知道。

   Ethereum Wallet一個以太坊賬戶圖像化管理工具,用於直觀的顯示節點賬戶餘額以及進行創建賬戶和轉賬交易等。錢包所做的操作都可以在geth命令行裏面操作,且不是很難。再加上版本兼容問題,所以我覺得可以不用。不過看看什麼樣還是可以的。

二、geth和Ethereum Wallet安裝

geth雙擊.exe文件,安裝到默認位置C:/Program Files/Geth或者自定義安裝。區別在於,如果安裝在C盤,對於Geth文件夾下面的文件訪問,比如後續提到的genesis.json需要使用管理員權限纔行。也就是打開一個cmd終端得“右擊開始菜單,選擇管理員模式Windows Powershell”。如果自定義安裝到非系統盤,則直接win+R,輸入cmd即可。

Ethereum Wallet直接解壓即可使用。

三、多節點私鏈搭建

我們以三個節點爲例。三個節點屬於Ip下的不同端口,即都是Localhost(127.0.0.1)。如圖:

1、準備創世節點配置內容

在geth安裝位置Geth文件夾裏面genesis.json文件,文件內容如下。注意,後綴必須爲json。有的文件夾不顯示文件後綴名。可以點擊查看顯示文件擴展名。我開始就是沒有顯示,實際弄了一個genesis.json.txt文件,所以沒成功。

{
   "config":{
	  "chainId":15,
	  "homesteadBlock":0,
	  "eip155Block":0,
	  "eip158Block":0
	},
    "nonce":"0x0000000000000042",    "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "difficulty": "0x40000",
    "alloc": {},
    "coinbase":"0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
  "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "",
    "gasLimit":"0xffffffff"
}

       2、創建並啓動第一個節點

         打開一個終端:Win+R,輸入cmd,回車。在命令行中進入Geth目錄,如圖:

         執行兩條指令:

          (1)初始化創世節點:geth --datadir "node1" init genesis.json
          (2)啓動node1節點:geth --datadir "node1"  --rpccorsdomain "*"  --networkid 989898 --rpc console --port 30304  --rpcapi "db,eth,net,web3" --rpcaddr "localhost"  --rpcport 8546 --ipcdisable --allow-insecure-unlock

        當第一條指令顯示如下表示第一步成功:

     當第二條指令顯示如下表示第二步成功:

       當兩條指令執行成功之後,你進入Geth文件夾,就可以看到多了一個node1文件夾,node1的相關配置就在裏面了。其中keystore是後面爲該節點創建的賬戶保存信息的地方。一個節點可以創建多個賬戶,創建一個賬戶,keystore裏面就會多一條記錄。geth裏面放置的就是node1的其他配置了,具體還沒了解,暫時沒需要。以後啓動node1的時候,cmd進入geth文件目錄之後,直接執行第二條指令就可以啦。

  

     3、創建並啓動第2、3個節點

      爲每一個節點打開一個cmd窗口。執行與步驟2裏面幾乎相同的操作。因爲三個節點都要加入同一個私鏈,所以創世節點都得通過genesis.json文件配置。指令關鍵關鍵點就是不同節點:

  •    port端口不同
  •    rpcport不同
  •    相同的networkid
  •    關閉進程間通信:--ipcdisable。

否則會報錯:

   Error starting protocol stack: Access is denied.

指令裏面的其他參數可以在cmd進入Geth目錄下之後,輸出geth --help查看詳情。文章後面也會進行分析。

     node2節點創建與啓動:

(1)geth --datadir "node2" init genesis.json
(2)geth --datadir "node2"  --rpccorsdomain "*"  --networkid 989898  --rpc console --port 30303 --rpcapi "db,eth,net,web3" --rpcaddr "localhost" --rpcport 8547 --ipcdisable  --allow-insecure-unlock

   node3節點創建與啓動

  (1)geth --datadir "node3" init genesis.json
  (2)geth --datadir "node3"   --rpccorsdomain "*"  --networkid 989898 --rpc console --port 30306  --rpcapi "db,eth,net,web3" --rpcaddr "localhost"  --rpcport 8548  --ipcdisable   --allow-insecure-unlock

    成功之後:

4、之後就可以在節點間執行如下操作:

     多節點以太坊私鏈搭建成功之後可以執行很多事情,然後這些很容易在網上查到,我就不再這裏展開細講了。注意凡是涉及到和私鏈或者節點交互的操作都需要在挖礦後生效,最好拿一個節點一直在挖礦。每次轉賬都得解鎖。

  • 爲各節點創建賬戶:personal.newAccount(“admin123” )     ()裏面是賬戶密碼
  • 查詢節點賬戶:eth.accounts     顯示該該節點下所有賬戶地址,rth.accounts相當於數組
  • 查詢賬戶餘額:eth.getBalance(eth.accounts[0])     查詢第一個賬戶的餘額,括號裏爲賬戶地址
  • 節點挖礦:miner.start(2)    ()裏面是線程數。注意一旦節點開始挖礦,終端就會一直刷新,如果需要輸入指令,不斷輸入你想輸入的指令即可,即使被沖掉也沒關係。最好提前寫好,複製粘貼會好些。終端裏複製選中即可複製,粘貼直接右擊即可。有時候在終端粘貼了不顯示,需要點擊下空格,或者回車應該纔會刷新。
  • 停止節點挖礦:miner.stop()
  • 查看節點信息:admin.nodeInfo.enode    顯示全部信息用於被別的節點添加使用,包括雙引號,應該是節點地址
  • 添加節點:admin.addPeer(上一條指令顯示的全部信息,包括雙引號)    括號應該是其他節點的地址
  • 查看peer節點:admin.peers,以數組形式展示
  • 轉賬:eth.sendTransaction({from:“第一個賬戶地址”,to:"第二個賬戶地址",value:web3.toWei(10,"ether")}) 第一個賬戶轉10個ether到第二個賬戶
  • 賬戶解鎖:personal.unlockAccount(eth.accounts[0])    括號裏面爲賬戶地址,或者(“賬戶地址”)

5、以太坊錢包使用

      只有在Ethereum  Wallet客戶端顯示出“private net”才說明錢包鏈接的是本地自己搭建的私鏈,否則應該是連接到了以太坊的公鏈上了。遇到一個問題,雙擊運行錢包軟件之後,發現無法連接到私鏈。

    解決方案:

      管理員模式打開命令行,進入以太坊目錄下之後,執行指令 ./Wallet  --rpc”127.0.0.1:30303”  ( ./Wallet  --rpc”127.0.0.1”  這也可以)(前提是你的可執行錢包文件改名爲Wallet,而且必須得在管理員權限下的終端纔可以執行./Wallet指令,好像"./"是管理員模式下的指令)

      但是我在寫這篇文章的時候發現這個解決方案又不奏效了,雖然我確實成功過。提示如下圖所示。我猜測應該還是因爲錢包和geth版本不匹配。所以正如我前文提到的,錢包只是圖形化而已。如果找不到一個與geth匹配的錢包,我建議直接不使用錢包了。因爲你改成爲其他版本,相關啓動節點的指令可能會發生變化(我試過)。

       錢包就是這樣的。我猜測一個節點應該需要運行一個錢包應用。錢包用於顯示該節點下所有的賬戶。一個節點可以有多個賬戶。在錢包裏面或者geth命令行創建賬戶的效果一樣。有幾個賬戶該節點的keystore文件夾裏就有幾條記錄。

       其實當你發現錢包弄得亂七八糟的時候,因爲可能保留了以前的信息。你可以刪除掉錢包保存的信息。存儲位置如下圖所示。當找不到路徑中某個對應的文件夾的時候,可能是隱藏了。點擊顯示,勾選顯示隱藏文件。

6、節點啓動指令參數講解

因爲多數參數作用已經在前文提到過,這裏不再贅述。主要講解兩個參數:

geth --datadir "node2"  --rpccorsdomain "*"  --networkid 989898  --rpc console --port 30303 --rpcapi "db,eth,net,web3" --rpcaddr "localhost" --rpcport 8547 --ipcdisable  --allow-insecure-unlock
  • --rpcapi "db,eth,net,web3":啓動這幾個庫的接口,纔可以在geth控制檯中使用,例如eth.accounts;而且不寫這個參數,在使用remix部署智能合約的時候會發現連接不上私鏈,無法完成部署;
  • --allow-insecure-unlock:沒有這個參數,無法解鎖賬戶。執行personal.unlockAccount(eth.accounts[0])指令時報錯:account unlock with HTTP access is forbidden

7、Tips:命令行行前顯示">":表示geth控制檯模式,執行geth相關指令。退出geth,直接輸入exit回車即可
           命令行前顯示文件目錄才表示,回到系統命令控制檯模式。例如geth  --help就不可以在geth控制檯模式下輸入,應該在cmd進入Geth目錄之後輸入指令。​

8、下節預告:應該會講解下智能合約使用,現在我也只是簡單瞭解了下用remix部署簡單合約以及測試。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章