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

时间:2018-04-02 23:10:19

标签: ethereum web3js web3 go-ethereum

我们正在使用web3连接到rinkeby测试以太坊网络。通过geth,通过localhost,使用以下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,并且我们通过geth创建的任何帐户都没有助记符。

任何建议或故障排除步骤将不胜感激。感谢

1 个答案:

答案 0 :(得分:1)

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

像Infura这样的公共节点(幸运的是!)不知道你的私钥,所以它不能为你签署交易。您需要在本地签名,然后使用sendSignedTransaction发送。