UnhandledPromiseRejectionWarning:错误:无法存储合同代码,请检查您的气体限制

时间:2018-05-06 15:21:11

标签: node.js ethereum solidity smartcontracts

我正在尝试将我简单的可靠性智能合约部署到Rinkeby网络上,但我一直收到错误:

  

UnhandledPromiseRejectionWarning:错误:合同代码不可能   存储,请检查您的气体限制。

我的可靠性代码很简单

pragma solidity ^0.4.18; 

contract Greetings{ 
  string public message; 

  function Greetings(string initialMessage) public{ 
    message = initialMessage;
  }  

  function setMessage(string newMessage) public {
    message = newMessage;
  }  
}

我的部署脚本是:

const HDWalletProvider = require('truffle-hdwallet-provider'); 
const Web3 = require('web3');
const { interface,bytecode} = require('./compile');

const provider = new HDWalletProvider(  
  'twelve word mnemonic...', 
  'https://rinkeby.infura.io/GLm6McXWuaih4gqq8nTY'    
);

const web3 = new Web3(provider);

const deploy = async () => {
    accounts = await web3.eth.getAccounts(); 

    console.log('attempting to deploy from account',accounts[0]);

    const result = await new web3.eth.Contract(JSON.parse(interface)) 
      .deploy({data:bytecode, arguments:['Hello World']})      
      .send({from: accounts[0], gas:'1000000'});                              

    console.log('Contract deployed to', result.options.address); 
};

deploy();

有趣的是,我曾经能够成功部署,但是当我创建一个新项目并重新执行相同的代码时,我现在收到此错误。请帮忙!

3 个答案:

答案 0 :(得分:32)

有完全相同的问题!似乎它是由“truffle-hdwallet-provider”版本0.0.5中的错误引起的。在udemy课程期间,显然使用“0.0.3”。

如果您这样做,应该没问题,这对我有用。

npm uninstall truffle-hdwallet-provider
npm install --save truffle-hdwallet-provider@0.0.3

然后我运行了已成功部署的同一合同。

祝你好运!

答案 1 :(得分:13)

可以通过将“ 0x”添加为字节码的前缀来解决此问题:

.deploy({ data: '0x' + bytecode, arguments: ['Hi there!'] })

更多信息位于https://ethereum.stackexchange.com/a/47654

答案 2 :(得分:2)

我认为字节码被视为单个数字而不是一系列字节。而不是提交数据:字节码,请尝试:

data:'0x0' + bytecode

它将“保留”字节码值作为字符串