以太坊私有鏈 多節點 注意事項筆記

AndyHuang
6 min readMay 25, 2020

--

以太坊私有鏈 多節點 注意事項筆記

多節點的環境在建構的時候,常常因為外在的因素的而產生連接的問題,比如說本機的 IP, 防火牆, NAT 的設定之類的。

如果你跟我一樣是用虛擬機來試作多節點的話,要克服的外部問題應該更多,所以最好的方式就是保持單純外部環境,打擊比較不那麼大。

本篇筆記,使用兩部虛擬機,及宿主機器來架構一個多節點的環境。

第一部虛擬機, 10.1.1.13 ,作為第一個節點建立創世區塊,OS 是 ubuntu20 ,

第二部虛擬機, 10.1.1.11 ,作為普通的節點運行,OS 是 Mint 19 ,可建立帳號,可挖礦。

第三部宿主機, 10.1.1.250 , 作為本篇筆記的操作及記錄環境,OS 是 win10 ,也是一般節點。

我建立節點的順序是先在 13 上建立第一個創世區塊的節點,

然後在 11 上建立第二個節點,並確認能連上 P2P 網路,

最後 250 上建立第三個節點,然後寫下本篇筆記,

win10 在建立節點時應注意的事項跟另外兩個相同,並沒有因為 OS不同而產生應特別注意的,

因此本篇的截圖以 win10 的 power shell 為主,其他兩部虛擬機為輔。

過程中會反復的在各節點中切換,三部機器的 terminal 介面都不一樣,稍微注意就可以看出截圖是哪一部機器。

一、環境檢查

網路要通,防火牆要打開什麼的,common sense 的就不講了。只說明及截圖跟geth 有關的部份。

首先確認13環境,

13 上面需要注意的是 enode 及 創世區塊建立時的設定檔,就是上篇文章中的 study_chain.json ,還有 networkid 。

將 study_chain.json 複制到 250 的 node8 目錄,我們將以 node8 作為geth 的工作目錄

使用 geth — datadir data — networkid=55661 init study_chain.json 初始化一個跟第一節點,有相同特徵的創世區塊

看到 Successfully 就放心一半,如果有問題,用 geth removedb — datadir data 來清除已有的數據

使用 geth — datadir data — networkid=55661 console 開始運行

注意一下 enode 的訊息,也可以用 admin.nodeInfo 來查詢

使用admin.nodeInfo 來查詢本機節點的狀態,然後用 admin.peers 看其他連到本機的節點,

有時候 admin.peers 會看一些節點連上來,但是 chainId 不同,networkid 不同,在連線時的 shakehand 階段,就會被忽略掉,不會真的連上來。

使用 admin.addPeer(“enode://6c141d2344d8d87cb939684364fd3fbede9f2cc933549b5d0f9f30a4b266bd5df49134a15a309b136f24d3a52b177b448911e297c677fdb57fb5d09a5f37971b@10.1.13:30305”) 來連上 13

這裡需要特別注意的是 enode 裡面的 ip 及 port ,ip 請輸入應該要能連上線的正確 ip 而不是顯示出來的那個。比如說,以本例,正確的是 10.1.1.13 , 但顯示出的卻是 192.168.1.201 ,不能使用顯示的,因為那是有可能網路環境造成的誤判(我的環境問題,也許你也會有相同問題)。port 可以指定,不指定就是 30303

使用 admin.peers 來卻定節點連接情況

也許會看到其他不相關連進來的節點,請忽略。注意到 remoteAddress 顯示 13 的 ip 及 port ,就是已經連上 13.

eth.blockNumber 看下區塊編號

區塊編號20 ,稍為記一下,等一下可以比對。

到 13 看下連接節點 admin.peers

其中要注意的是 來自 250 這個,就是我們剛剛連上的。另一 個 11 是在寫這篇筆記時就連上的。

二、節點同步情況

我們可以用各種複雜的方法,來確定節點之間的同步,比如帳號餘額之類的。但我們用區塊編號來看節點之間的同步情況,更為簡單明確的數值

首先確定三個節點目前的區塊編號

這裡我們用 11 來做為礦機,先設定挖礦時收獎勵的地址 miner.setEtherbase(“0xe49744CB16d401361cEC40003e83Bb3617771a48”)

開始挖礦 miner.start(1)

等了很久終於挖到礦

暫停挖礦 miner.stop()

然後再看一下三部機器的區塊編號

以上的圖,就是收到區塊的訊息,以及最後用 eth.blockNumber 所顯示出來的區塊編號29

三部不同環境的機器,都已經同步了。

其實輸入命令然後查看並不難,只要環境建立了,也不會有什麼意外產生。

以太坊網路及節點的特性,透過本次私有鏈多節點的實作,能夠稍微感受一下,區塊鏈網路對於同步的要求。

比如說創世區塊的設定一定要一樣,只要稍有不同,節點就無法相連。

是否應該有個管理面版呢?

--

--

AndyHuang
AndyHuang

Written by AndyHuang

blockchain , defi , programe

No responses yet