Go-Ethereum

使用 web3 訪問集群中的提供者不起作用

  • February 5, 2019

我在集群中部署了一個區塊鏈。我有一個在集群節點中執行的 geth 實例,另一個在另一個集群節點中執行,形成了一個區塊鏈。我想執行一個腳本,該腳本需要訪問兩個集群節點中的提供程序。例如:

node1 - ws:127.0.0.1:3001
node2 - ws:127.0.0.2:3002

在腳本中,我將提供者添加為:

var web3Provider_1 = new Web3(new Web3.providers.WebsocketProvider('ws://127.0.0.1:3001'));
var web3Provider_2 = new Web3(new Web3.providers.WebsocketProvider('ws://127.0.0.2:3002'));

在本地它可以工作,但在集群中腳本找不到提供者:

Error: Please provide an valid Web3 provider

從集群節點中執行的腳本訪問區塊鏈中不同節點的提供者的方法是什麼?

這聽起來像一般的網路拓撲,不是嗎?

你有這個:

var web3Provider_1 = new Web3(new Web3.providers.WebsocketProvider('ws://127.0.0.1:3001'));
var web3Provider_2 = new Web3(new Web3.providers.WebsocketProvider('ws://127.0.0.1:3002'));

這可能會連接到本地的,但另一個不會在localhostaka上127.0.0.1——它會在任何地方。所以 …

var web3Provider_1 = new Web3(new Web3.providers.WebsocketProvider('ws://127.0.0.1:3001'));
var web3Provider_2 = new Web3(new Web3.providers.WebsocketProvider('ws://<OTHER_HOST_IP_ADDRESS>:3002'));

在任何地方執行相同的腳本可能更易於管理,因此在確保正確的埠打開之後:

var web3Provider_1 = new Web3(new Web3.providers.WebsocketProvider('ws://<NODE_A_IP>:3001'));
var web3Provider_2 = new Web3(new Web3.providers.WebsocketProvider('ws://<NODE_B_IP>:3002'));

我想不出像這樣繞過主機的理由,但我認為這是一般的想法。

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/66627