代码之家  ›  专栏  ›  技术社区  ›  rofls

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

  •  1
  • rofls  · 技术社区  · 6 年前

    我们正在使用 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 回复  |  直到 6 年前
        1
  •  1
  •   user94559    6 年前

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

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