當從沒有執行節點的瀏覽器呼叫時,Dapp 沒有連接(通過 web3)
嘗試通過瀏覽器連接 dapp,當通過執行 geth 節點的機器上的瀏覽器執行相同操作時,通過公共 ip 連接(例如:http175.xxx.xxx.xx:xxxxlogin)但嘗試通過不同瀏覽器連接時相同特別是不同的機器,它在控制台中拋出錯誤
錯誤:連接錯誤:無法連接到節點 http://192.xxx.x.xx:8484
geth command :-geth --rpccorsdomain "*" --rpc --rpcport "8484" --rpcaddr "192.xxx.x.xx" --datadir="xxxx" --port "30302" --networkid 65535 --rpcapi="db,eth,net,web3,personal,web3" --nodiscover console
web3 程式碼
var Web3 = require('web3'); var web3 = new Web3(); web3.setProvider(new web3.providers.HttpProvider('http://192.xxxx.x.xx:8484')); web3.eth.defaultAccount = "0x6f3ae17a20d3367d649f8774a42a15xxxxxxxxxx";
192.xxx.x.xx:8484 是節點的ip
等待建議..
對我來說,這聽起來像是網路某處的**防火牆問題。**即使通過公共 IP 從本地電腦訪問節點並不意味著它可以從任何地方訪問。
例如,如果我在 Windows 10 機器上執行 geth(使用與您相同的參數)。我將能夠使用外部網路介面 192.168.xx 從這台機器訪問 JSON-RPC 端點,但不能從位於同一網路上的手機訪問。因為啟用了 Windows 防火牆。禁用後,它可以工作。
關於 Thomas 的回答,我同意去中心化是網路架構方面的新範式這一事實
$$ peer2p VS client-server $$. 但是 JSON-RPC WebService 和 Web3 庫對於不能在本地託管節點的任何設備(例如 IOT、個人電腦等)都很有用。 我不相信世界上每一個與區塊鏈互動的設備在很長一段時間內都會成為一個節點。現在還為時尚早…
以我為例,我家裡有多個設備(電腦、筆記型電腦、手機、NAS、智能電視、遊戲機、樹莓派),我的一個樹莓派正在託管一個完整的乙太坊節點。我認為這個值得信賴的“節點”對於我的家來說是自給自足的:
- 我的瀏覽器可以使用 Metamask 與區塊鏈互動(附加到此節點)
- 我的控制台和我的智能電視可以連接到這個節點並為遊戲或 Netfix 訂閱付費
- …
我想,這是辯論的一部分!
您遇到的問題正是它所說的以及您所指出的。dapp 正在嘗試連接到不存在的節點。
這完美地說明了我們所說的去中心化的含義。這不像在 Web 2.0 世界中您可以訪問遠端伺服器。沒有遠端伺服器。每個節點都有本地執行的節點來驗證並同意所有數據。
在我看來,去中心化是最重要的一點,許多人要麼錯過要麼妥協。