這次連線是要將不同主機上的節點連線,需要多臺主機網路相互連通。本次連線通過兩臺Ubuntu虛擬機器器(VMware)連線同一個手機熱點實現節點連線。
首先兩臺主機連線一個手機熱點,然後要在虛擬機器器設定裡把網路介面卡改為橋接模式並勾選複製物理網路連線狀態,保證之後IP可以ping通。
我當時出現了這個問題,虛擬機器器連上熱點後網路連線顯示這個圖示,說明不能上網,需要修改網路設定:
點選編輯,選擇虛擬網路編輯器,選擇修改,把橋接模式的橋接到改為自己電腦的網路卡。我電腦之前橋接到自動,結果虛擬機器器網路總顯示連線失敗。
網路設定完畢後進行測試。在虛擬機器器中設定的Network(網路)中可以檢視IPV4和DNS,如果兩臺虛擬機器器的DNS相同可進行下一步,不同的話具體解決辦法我還沒試。。。
然後兩臺主機互相ping另外一臺主機的IPV4,ping通即可
網路測試的成功是保證不同主機節點連線的關鍵,之前因為DNS不同浪費了大量時間。
主機1中:
創個空資料夾,在終端建立本地賬戶:
注意儲存password和賬戶地址。
主機2也同樣操作建立一個新賬戶。
主機1中:
建立POA演演算法的json檔案:
zhazhayu2@ubuntu:~$ puppeth
+-----------------------------------------------------------+
| Welcome to puppeth, your Ethereum private network manager |
| |
| This tool lets you create a new Ethereum network down to |
| the genesis block, bootnodes, miners and ethstats servers |
| without the hassle that it would normally entail. |
| |
| Puppeth uses SSH to dial in to remote servers, and builds |
| its network components out of Docker containers using the |
| docker-compose toolset. |
+-----------------------------------------------------------+
Please specify a network name to administer (no spaces, hyphens or capital letters please)
> key
Sweet, you can set this via --network=key next time!
INFO [10-13|06:26:51.139] Administering Ethereum network name=key
WARN [10-13|06:26:51.139] No previous configurations found path=/home/zhazhayu2/.puppeth/key
What would you like to do? (default = stats)
1. Show network stats
2. Configure new genesis
3. Track new remote server
4. Deploy network components
> 2
What would you like to do? (default = create)
1. Create new genesis from scratch
2. Import already existing genesis
> 1
Which consensus engine to use? (default = clique)
1. Ethash - proof-of-work
2. Clique - proof-of-authority
> 233
How many seconds should blocks take? (default = 15)
> 3
Which accounts are allowed to seal? (mandatory at least one)
> 0x6c03Ed0D9E001d652c56Fe0841418f9dc208F933
> 0x
Which accounts should be pre-funded? (advisable at least one)
> 0x6c03Ed0D9E001d652c56Fe0841418f9dc208F933
> 0x
Should the precompile-addresses (0x1 .. 0xff) be pre-funded with 1 wei? (advisable yes)
>
Specify your chain/network ID if you want an explicit one (default = random)
> 2
INFO [10-13|06:28:34.599] Configured new genesis block
What would you like to do? (default = stats)
1. Show network stats
2. Manage existing genesis
3. Track new remote server
4. Deploy network components
> 2
1. Modify existing configurations
2. Export genesis configurations
3. Remove genesis configuration
> 2
Which folder to save the genesis specs into? (default = current)
Will create key.json, key-aleth.json, key-harmony.json, key-parity.json
>
INFO [10-13|06:28:44.139] Saved native genesis chain spec path=key.json
ERROR[10-13|06:28:44.139] Failed to create Aleth chain spec err="unsupported consensus engine"
ERROR[10-13|06:28:44.140] Failed to create Parity chain spec err="unsupported consensus engine"
INFO [10-13|06:28:44.146] Saved genesis chain spec client=harmony path=key-harmony.json
What would you like to do? (default = stats)
1. Show network stats
2. Manage existing genesis
3. Track new remote server
4. Deploy network components
> ^C
把生成的創世塊key.json放到主機1和主機2的賬戶資料夾中,並且都進行初始化:
開啟節點(注:開啟以太坊節點有很多命令,不同命令開啟節點後會有不同,具體請查閱其他教學)
主機1中:
上圖中有一個錯誤,開啟節點命令末尾的數位應該是233(創世塊的chainid),而不是2
然後查詢連線節點數:
可以看見連線節點為0,存在初始賬戶,餘額無窮。
然後輸出主機2的節點資訊(由於另一臺虛擬機器器在同學的電腦上,所以這裡以主機1的輸出為例,注意enode的區分):
記錄主機2的enode。
在主機1中連線enode:
注意這裡要將主機2的enode中127.0.0.1改為主機2的IPV4。
主機1再次查詢連線節點數:
主機2查詢連線節點數同樣返回1,說明連線成功。
查詢連線資訊:
可以看到localAddress和remoteAddress和虛擬機器器IP匹配,說明連線正確。
多輸出幾次發現結果相同,說明連線成功不是網路波動的問題(我之前遇到過)。
主機1開啟挖礦:
報錯:賬戶未解鎖。解鎖賬戶:
這裡賬戶地址是初始賬戶的地址,密碼是建立新賬戶時的密碼。
再次開啟挖礦:
顯示需要等待其他節點。
寫部落格時回顧了整個過程,還是發現了一些錯誤,比如開啟節點chainid用錯了。這個應該不影響節點連線,但是在挖礦時可以看到,主機1挖礦時顯示等待其他節點,而主機2開啟挖礦時只返回了null。之前以為主機1沒用給主機2授予許可權,現在想來可能是chainid的問題。
本文非準確教學,僅供參考。初學階段難免出現錯誤,望指正。