0

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

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。

如果有人可以提供帮助,我将不胜感激。

4

1 回答 1

0

我可以发现两个问题:

  1. 您正在通过 47,000,000 气体,这高得离谱。综上所述,整个区块只能使用 8,000,000 气体。如果以当前的天然气价格实际使用 4700 万天然气,则成本将超过 200 美元。我相信这会导致您的交易在任何节点尝试运行它之前被拒绝。
  2. Infura作为一个公共节点,永远无法拥有您的私钥(在本例中为challenger的私钥),因此它无法为您签署交易。如果challenger是您的帐户,那么您可以在广播之前持有密钥并签署部署交易。如果challenger是您的应用程序的用户,您最好让用户通过MetaMask之类的方式自己签名并发送交易。
于 2018-01-20T16:52:50.603 回答