Go-Ethereum

我的乙太坊節點如何接受遠端連接?

  • February 17, 2021

我需要在我正在創建的一些 Python 和 Javascript 應用程序上使用 Web3,所以我決定在 VPS 上設置一個輕節點。該節點似乎可以工作,但我無法從 vps 外部訪問它。我確保為 RPC API 提供服務,並且我嘗試了一切,但我仍然可以從 vps 內部使用 web3。

w3 = Web3(Web3.HTTPProvider('http://<MY-IP>:8545'))
print(w3.isConnected())

False.

相反,如果我嘗試從託管節點的本地 VPS 執行相同操作,我會得到True.

這是我啟動節點的方式:

geth --syncmode "light" --rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi "eth,web3"

我知道讓節點可用於任何遠端連接不是一個好習慣,但我沒有儲存私鑰或餘額,我只想用它從 web3 獲取區塊鏈數據,我會看看是否有讓它只接受特定IP的方法。我怎樣才能讓它接受遠端連接?

問題可能是埠 8545 拒絕遠端連接嗎?或者是別的什麼?

首先,您應該確保您使用的是相當新的geth版本。我測試了我最近從官方下載站點下載的版本

我的本地版本是

$ ./geth version
Geth
Version: 1.9.25-stable
Git Commit: e7872729012a4871397307b12cc3f4772ffcbec6
Git Commit Date: 20201211
Architecture: amd64
Protocol Versions: [65 64 63]
Go Version: go1.15.6
Operating System: linux
GOPATH=
GOROOT=go

其次,您應該確保使用標誌,您列出的標誌已被棄用,將來將被刪除。

--rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi "eth,web3"

應該替換為

--http --http.port 8545 --http.addr 0.0.0.0 --http.corsdomain '*' --http.api 'eth,web3'

最後,您還需要啟用http.vhosts並允許任何或僅您的域。

你可以這樣做

--http.vhosts '*'

當你啟動節點時,你應該看到這一行

INFO [02-17|14:32:16.975] HTTP server started                      endpoint=[::]:8545 cors=* vhosts=*

即使在控制台中顯示了這條線之後,您仍然可能無法立即連接到它。

節點啟動後(可能需要一段時間),您將能夠連接到它。

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