不同主机间POA以太坊节点连接

这次连接是要将不同主机上的节点连接,需要多台主机网络相互连通。本次连接通过两台Ubuntu虚拟机(VMware)连接同一个手机热点实现节点连接。

网络测试

首先两台主机连接一个手机热点,然后要在虚拟机设置里把网络适配器改为桥接模式并勾选复制物理网络连接状态,保证之后IP可以ping通。

我当时出现了这个问题,虚拟机连上热点后网路连接显示这个图标,说明不能上网,需要修改网络设置:

点击编辑,选择虚拟网络编辑器,选择修改,把桥接模式的桥接到改为自己电脑的网卡。我电脑之前桥接到自动,结果虚拟机网络总显示连接失败。
网络设置完毕后进行测试。在虚拟机中设置的Network(网络)中可以查看IPV4和DNS,如果两台虚拟机的DNS相同可进行下一步,不同的话具体解决办法我还没试。。。

然后两台主机互相ping另外一台主机的IPV4,ping通即可
网络测试的成功是保证不同主机节点连接的关键,之前因为DNS不同浪费了大量时间。

本地以太坊POA搭建

主机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的问题。


本文非准确教程,仅供参考。初学阶段难免出现错误,望指正。

猜你喜欢

转载自blog.csdn.net/zha_zha_yu/article/details/109091869