在我的台式电脑和笔记本电脑上,我下载了geth&tools 1.8.2。在桌面上,我使用以下方法创建了一个本地节点:
geth --datadir "D:\EthereumLocalNode" init "D:\EthereumLocalNode\genesis.json"在genesis.json文件中:
{
"config": {
"chainId": 1114,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "400",
"gasLimit": "2100000",
"alloc": {
"1f8b3201b54d73daac3c9437289102c7f11f9ff0": {
"balance": "100000000000000000000000"
},
"968859556c516ccf00269a69795d08b5e899e2d2": {
"balance": "120000000000000000000000"
}
}
}然后,通过使用引导节点工具,我创建了nodekey,以便稍后用于引导节点命令:
bootnode -genkey boot.key然后使用以下标志启动第一个节点:
geth --datadir "D:\EthereumLocalNode" --networkid 1114 console 2>> "D:\EthereumLocalNode\myLog.log" --rpc --rpccorsdomain "*" --nodiscover --nodekey boot.key我的意图是:
--networkid 1114 // random id (same as chainId in genesis.json, I'm not sure if this equivalance is required, please comment if not)
--rpc
--rpccorsdomain "*" // To be able to reach this local node using remix and deploy contracts through there
--nodiscover // To manually add the nodes I want, no other random nodes allowed.
--nodekey boot.key // To use same constant key I created previously in the boot.key file 当我跑的时候
admin.nodeInfo.enode我得到:
"enode://1998f24ae4cb9f685633e679286d613a3752ed03d460308c21e3c5efc28d080c608f351c379bdc4f77f4f036e3ce86e1786ec7256c8e467c1dee8c99aafc0629@[::]:30303?discport=0"请注意结尾处的?discport=0部件(由于- note选项)
我的桌面ip被指定为192.168.1.20用于本地wifi网络。
然后,我在笔记本中创建了一个空文件夹,名为“E:\EthereumLocalNode2 2”,稍后我将使用该文件夹创建一个将连接到我桌面上的节点的节点。
现在,我故意将其保留为空,而不对该节点使用geth init,因为我希望我的网络有一个将起源于我桌面中的节点的单一块链。如果我在这个节点中运行geth,那么成因节点和块链就会有所不同。(请警告我,如果这个假设是错误的)
我在膝上型计算机中运行以下命令:
geth --datadir "E:\EthereumLocalNode2" console 2>> "E:\EthereumLocalNode2\myLog2.log" --bootnodes "enode://1998f24ae4cb9f685633e679286d613a3752ed03d460308c21e3c5efc28d080c608f351c379bdc4f77f4f036e3ce86e1786ec7256c8e467c1dee8c99aafc0629@192.168.1.20:30303" --nodiscover注意,enode地址与我以前创建的boot.key相同。接下来发生的情况是,生成一些默认的块链,admin.peers为两个节点返回空。
我也尝试使用以下geth调用,每个不同之处如下:
没有"enode://“字符串:
geth --datadir "E:\EthereumLocalNode2" console 2>> E:\EthereumLocalNode2\myLog2.log" --bootnodes "1998f24ae4cb9f685633e679286d613a3752ed03d460308c21e3c5efc28d080c608f351c379bdc4f77f4f036e3ce86e1786ec7256c8e467c1dee8c99aafc0629@192.168.1.20:30303" --nodiscover在enode地址周围没有引号:
geth --datadir "E:\EthereumLocalNode2" console 2>> E:\EthereumLocalNode2\myLog2.log" --bootnodes 1998f24ae4cb9f685633e679286d613a3752ed03d460308c21e3c5efc28d080c608f351c379bdc4f77f4f036e3ce86e1786ec7256c8e467c1dee8c99aafc0629@192.168.1.20:30303 --nodiscover在ip地址周围有手镯
geth --datadir "E:\EthereumLocalNode2" console 2>> "E:\EthereumLocalNode2\myLog2.log" --bootnodes "1998f24ae4cb9f685633e679286d613a3752ed03d460308c21e3c5efc28d080c608f351c379bdc4f77f4f036e3ce86e1786ec7256c8e467c1dee8c99aafc0629@[192.168.1.20]:30303" --nodiscover所有这些都无法成功连接到我桌面上的节点。
我也尝试过使用admin.addPeer,但没有成功。
然后,我对防火墙是否妨碍了我的工作感到犹豫不决,所以在我的桌面上,我启动了另一个cmd实例,并在一个再次为空的文件夹中创建了另一个节点,该文件夹使用--引导节点指向我的第一个节点,但这次使用
--ipcdisable // To be able to connect from the same computer.
--port 30304 // Not to have conflicting ports全员指挥是:
geth --datadir "D:\EthereumLocalNode2" console 2>> "D:\EthereumLocalNode2\myLog2.log" --bootnodes 1998f24ae4cb9f685633e679286d613a3752ed03d460308c21e3c5efc28d080c608f351c379bdc4f77f4f036e3ce86e1786ec7256c8e467c1dee8c99aafc0629@127.0.0.1:30303 --port 30304 --networkid 1114 --ipcdisable --nodiscover同样,这和admin.addPeer都不起作用。我无法通过本地家庭wifi网络或通过同一台计算机连接到我的第一个节点。
请帮帮忙,我已经失去了两个晚上,没有希望找到解决办法。我使用旗子的方式可能有问题。
抱歉解释得太长了。
发布于 2018-03-15 00:50:45
我假设您的私有测试网上的geth实例是从同一台机器上运行的?(相对于使用自己的VLAN独立的机器)
添加--nodiscover标志可以防止节点窥视,除非手动执行,那么您对admin.addPeer的命令是什么?它需要后面跟着enode地址、ip和端口,如下所示:
admin.addPeer("enode://insertenodeaddresshere@insert Node 1 IP here:insertportnumber")一个替代引导节点的方法是创建一个static-nodes.json文件并将其放入您的数据中心。此文件将包含要在启动geth实例时自动连接到的enode地址列表。不需要旗子。这是一个参考的一个例子。
https://ethereum.stackexchange.com/questions/42674
复制相似问题