web3 json 尝试事务时出现 rpc 错误“”

web3 json rpc error "" when attempting transactions

我们正在使用 web3 连接到 rinkeby 测试以太坊网络。当通过 geth 这样做时,通过本地主机,使用以下 web3 命令:

var web3 = new Web3('http://localhost:8545');

我们没有收到任何错误。我们使用这个命令来启动geth:

geth --rinkeby --rpc --rpcapi="personal,eth,network,web3,net" --ipcpath "~/Library/Ethereum/geth.ipc"

然而,当我们尝试直接使用 rinkeby 测试网络时:

var web3 = new Web3('https://rinkeby.infura.io/');

我们收到此错误:

Error: Invalid JSON RPC response: ""
   at Object.InvalidResponse (errors.js:42)
   at XMLHttpRequest.request.onreadystatechange (index.js:73)
   at XMLHttpRequest.dispatchEvent (event-target.js:172)
   at XMLHttpRequest.setReadyState (XMLHttpRequest.js:546)
   at XMLHttpRequest.__didCompleteResponse (XMLHttpRequest.js:387)
   at XMLHttpRequest.js:493
   at RCTDeviceEventEmitter.emit (EventEmitter.js:181)
   at MessageQueue.__callFunction (MessageQueue.js:353)
   at MessageQueue.js:118
   at MessageQueue.__guardSafe (MessageQueue.js:316)

大多数操作在两个网络上都有效,但是 .send() 直接连接到 rinkeby 网络时调用失败。

我们认为这是身份验证的问题,因为其他不执行事务的命令成功。但是,我们尝试使用 HDWalletProvider 并且 none 我们通过 geth 创建的帐户具有助记符。

如有任何建议或疑难解答步骤,我们将不胜感激。谢谢

交易必须签名。当您通过本地 geth 节点发送交易时,它知道与您发送的地址对应的私钥,因此它可以为您签署交易(一旦您解锁帐户)。

像 Infura 这样的 public 节点(幸运的是!)不知道您的私钥,因此它无法为您签署交易。您需要在本地签名,然后使用 sendSignedTransaction.

发送它们