UnhandledPromiseRejectionWarning:错误:无法存储合约代码,请检查您的gas限制

Posted

技术标签:

【中文标题】UnhandledPromiseRejectionWarning:错误:无法存储合约代码,请检查您的gas限制【英文标题】:UnhandledPromiseRejectionWarning: Error: The contract code couldn't be stored, please check your gas limit 【发布时间】:2018-10-16 12:01:48 【问题描述】:

我正在尝试将我的简单 Solidity 智能合约部署到 Rinkeby 网络上,但我不断收到错误消息:

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

我的 Solidity 代码很简单

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();

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

【问题讨论】:

【参考方案1】:

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

如果您执行以下操作应该没问题,它对我有用。

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

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

祝你好运!

【讨论】:

这与在字节码之前添加的“0x”一起解决了我遇到的相同问题,我正要放弃那门 udemy 课程。【参考方案2】:

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

data:'0x0' + bytecode

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

【讨论】:

【参考方案3】:

这个问题可以通过添加'0x'作为字节码的前缀来解决:

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

更多信息请访问https://ethereum.stackexchange.com/a/47654。

【讨论】:

这个解决方案更有意义!应该是公认的答案。谢谢你,我坚持了一段时间! 仅此一项并不能解决我的问题,我必须将 Truffle 降级到 0.0.3 才能使其正常工作。【参考方案4】:

也只需移除气场,让 metamask 决定气体限制。这种方式对我有用。

【讨论】:

以上是关于UnhandledPromiseRejectionWarning:错误:无法存储合约代码,请检查您的gas限制的主要内容,如果未能解决你的问题,请参考以下文章

[Unhandled promise rejection: TypeError: null is not an object (evaluating '_reactNativeImageCropPic

等待 - 捕获错误 - UnhandledPromiseRejectionWarning

批量删除如何工作?

7月工作知识总计:

未处理的承诺拒绝 |重启命令

未处理的承诺拒绝警告(Cordova Angular)