Go-Ethereum
通過 websockets 或 HTTP 將 geth 連接到 web3.js 1.0
我正在建構一個最小的 nodeJS 應用程序,它應該通過 web3.js 連接到我的 geth 節點。我正在關注官方的 web3.js1.0 文件,我正在使用 web3 1.0.0-beta.29。
我確實設法通過 IPC 進行連接,但 HTTP 和 websockets 都失敗了——在這兩種情況下,我從我的 JS 腳本中得到相同的輸出,就好像根本沒有執行 geth 一樣。任何幫助,將不勝感激。
1)HTTP(不工作)
格思:
geth syncmode="fast" --cache=4096 --rpc --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,web3,personal"
index.js:
var Web3 = require('web3'); var web3 = new Web3('http://localhost:8545'); // same output as with option below // var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); web3.eth.getAccounts(console.log); console.log("Hello World");
輸出:
$ node index.js Hello World Error: Invalid JSON RPC response: ""
2)websockets(不工作)
格思:
geth syncmode="fast" --cache=4096 --ws --wsport 8546 --wsorigins "*" console
index.js:
var Web3 = require('web3'); var web3 = new Web3("ws://localhost:8546"); // same output as with option below // var web3 = new Web3(new Web3.providers.WebsocketProvider('ws://localhost:8546')); web3.eth.getAccounts(console.log); console.log("Hello World");
輸出:
$ node index.js Hello World connection not open on send() Error: connection not open
3)IPC(作品)
geth:(與 HTTP 相同的開始)
geth syncmode=“fast” –cache=4096 –rpc –rpcport 8545 –rpccorsdomain “*” –rpcapi “eth,web3,personal”
index.js:
var net = require('net'); var Web3 = require('web3'); var web3 = new Web3('/Users/sebastian/Library/Ethereum/geth.ipc', net); // same output as with option below // var web3 = new Web3(new Web3.providers.IpcProvider('/Users/sebastian/Library/Ethereum/geth.ipc', net)); web3.eth.getAccounts(console.log); console.log("Hello World");
輸出:
$ node index.js Hello World null [ '0x045a6A820FD596a4c1a49732af01E3EF1D6aEb8B' ]
geth 命令行中有一個錯字:你錯過了同步模式前面的雙破折號。不知道為什麼,但它似乎阻止了 geth 啟動 HTTP RPC 偵聽器。
基本上,需要
--wsorigins "*"
在geth
命令中聲明選項才能通過websocket provider
或連接到節點http provider
。在您的情況下,您在 前面缺少雙破折號
syncmode
,添加雙破折號或刪除syncmode
可以解決問題。另外,根據文章https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options,
–wsorigins 值:接受 websockets 請求的來源
希望這有幫助。