部署智能合约web3无效的RPC响应

时间:2018-01-20 14:11:52

标签: javascript node.js web3

我尝试在节点服务器上部署合同,如下所示:

var escrow = 'pragma solidity ^0.4.4;contract Escrow {address public challenger;address public participant;address public arbiter;function Escrow(address _participant, address _arbiter) {challenger = msg.sender;participant = _participant;arbiter = _arbiter;}function payoutToParticipant() {if(msg.sender == challenger || msg.sender == arbiter) {participant.send(this.balance);}}function refundToChallenger() {if(msg.sender == challenger || msg.sender == arbiter) {challenger.send(this.balance);}}function getBalance() constant returns (uint) {return this.balance;}}';

module.exports.createEscrowContract = function(req, res) {
    //Set variables
    var challenger = '0xE6...';
    var participant = '0x4E...';
    var arbiter = '0xe5C...';

    //Compile contract
    var compiled = solc.compile(escrow);

    console.log(compiled);
    const web3 = new Web3();
    web3.setProvider(new 
    web3.providers.HttpProvider("https://mainnet.infura.io/XXXX"));

    //Store bytecode
    var bytecode = compiled.contracts[':Escrow'].bytecode;

    //Store abi
    var abi = JSON.parse(compiled.contracts[':Escrow'].interface);

    var escrowContract = web3.eth.contract(abi);

    //Seems to compile fine.
    console.log(escrowContract);

    //Deploy contract
    var deployed = escrowContract.new(participant, arbiter, {
      from: challenger,
      data: bytecode,
      gas: 470000,
      }, (error, contract) => {

           console.log(error); 
           // Invalid JSON RPC response: ""
           console.log(contract);
           //undefined
      });


}

我已尝试了几件事并阅读了文档,但似乎找不到任何东西!我确信我不能成为唯一有此问题的人,我使用的是web3@0.20。

如果有人可以提供帮助,我真的很感激。

1 个答案:

答案 0 :(得分:0)

我可以发现两个问题:

  1. 你通过47,000,000气体,这是非常高的。将它放在上下文中,整个只能使用8,000,000个气体。如果您实际使用当前天然气价格的4700万吨天然气,则需要花费超过200美元。我相信这会导致您的事务在任何节点尝试运行之前被拒绝。
  2. Infura作为公共节点,无法拥有您的私钥(在这种情况下,是challenger的私钥),因此它可以'为你签一笔交易。如果challenger是您的帐户,那么您可以在广播之前按住密钥并签署部署事务。如果challenger是您应用的用户,则最好让用户签名并通过MetaMask之类的内容自行发送交易。