2

在本教程之后,我一直在尝试设置基于以太坊的演示 ICO ,但是每次我尝试将合约部署到 Ropsten 或 Rinkeby ir 时都会出现以下错误:

Running migration: 2_deploy_contracts.js
  Deploying SuperHeroTokenThreeCrowdsale...
  ... 0x9d0da17f00192993720639abceecc2b33c5fbb9a29dd43fa6e1abd0ce6aecc5d
Error encountered, bailing. Network state unknown. Review successful transactions manually.
Error: The contract code couldn't be stored, please check your gas amount.
    at Object.callback (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:314870:46)
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:35060:25
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:316808:9
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:164746:11
    at /usr/local/lib/node_modules/truffle/build/cli.bundled.js:294942:9
    at XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:296367:13)
    at XMLHttpRequestEventTarget.dispatchEvent (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:164934:18)
    at XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:165224:12)
    at XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:165379:12)
    at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/truffle/build/cli.bundled.js:165339:24)
  • 系统:Ubuntu 16.04
  • 松露:v4.0.0-beta.2
  • Geth:1.7.2-稳定
  • OpenZeppelyn Solidity 1.3.0

松露.js:

module.exports = {
  networks: {
    development: {
      host: "localhost",
      port: 8545,
      gas: 4700000, 
      from: '0x24182550B8630629501AC11f5568dbb7EE18dBd2',
      network_id: "*" // Match any network id
    },
  }
};

另外我不得不说我的 Rinkeby 账户上有以太币。另一个注意事项 - 如果我部署到 TestRpc 它工作得很好,我可以购买我的自定义令牌并且一切正常。我试图调整气体量,但没有任何改变。

任何想法可能是问题所在?

4

4 回答 4

1

我也面临同样的问题,这是我为解决此错误所做的。

首先要记住,部署使用 zeppelin-solidity 的智能合约,在您遵循的教程中,它使用大量的 gas 值。我能够在 testrpc 上部署合约,但无法在 testnet 上部署(rinkeby 和 ropsten)。当我监控 testrpc 控制台时,合约使用了 5200000 量的 gas。ropsten 的块限制是(https://ropsten.infura.io)是 4700000。因此我的合约没有在那里部署并且它给出了同样的错误。如果我增加 truffle.js 文件中的气体量,它会给我错误“超过块气体限制”。

因此,我选择在 truffle.js 文件中使用以下配置在 Rinkeby 网络上部署合约。请确保使用 npm install 安装 npm 依赖项...

require('dotenv').config();
const Web3 = require("web3");
const web3 = new Web3();
const WalletProvider = require("truffle-wallet-provider");
const Wallet = require('ethereumjs-wallet');

var rinkebyPrivateKey = new Buffer(process.env["RINKEBY_PRIVATE_KEY"], "hex")
var rinkebyWallet = Wallet.fromPrivateKey(rinkebyPrivateKey);
var rinkebyProvider = new WalletProvider(rinkebyWallet, "https://rinkeby.infura.io/");

module.exports = {
  networks: {
    development: {
      host: "localhost",
      port: 8545,
      gas: 6700000,
      from: "0x2abdf05db2c9632ab240ee59963816f09e6d3e5a",
      network_id: "*" // Match any network id
    },
    rinkeby: {
      provider: rinkebyProvider,
      gas: 6700000,
      gasPrice: web3.toWei("20", "gwei"),
      network_id: "2",
    }
  },
  solc: {
    optimizer: {
      enabled: true,
      runs: 200
    }
  }
};

我希望它可以帮助您解决您的问题。如果有任何事情请告诉我。

于 2017-12-19T07:21:35.237 回答
1

合约可能对于 gas 限制来说太大了。尝试在您的 genesis.json 中将您的 gasLimit 设置为非常高的值,例如 0x60000000000000。这样,您可以在 truffle.js 中将 gas: 增加到 6000000。这应该足以部署您的合约。

于 2017-11-27T14:22:30.063 回答
1

看起来代码中有一些错误。该消息完全具有误导性。无需更改 truffle.js 中的气体值

更改2_deploy_contracts.jsstartTime中的and后endTime,可以将合约部署到 rinkeby。

const IcoMyCoin = artifacts.require("./MyCoinCrowdsale.sol");
const duration = {
    seconds: function(val) { return val},
    minutes: function(val) { return val * this.seconds(60) },
    hours:   function(val) { return val * this.minutes(60) },
    days:    function(val) { return val * this.hours(24) },
    weeks:   function(val) { return val * this.days(7) },
    years:   function(val) { return val * this.days(365)}
};

module.exports = function(deployer, network, accounts) {
    const startTime = web3.eth.getBlock('latest').timestamp + duration.minutes(1);
    const endTime = startTime + duration.minutes(30);
    const rate = new web3.BigNumber(1000);
    const wallet = '<< YOUR WALLET ADDRESS>>';

    deployer.deploy(IcoMyCoin, startTime, endTime, rate, wallet)
};
于 2017-12-21T10:03:19.620 回答
0

我也面临同样的问题 set gas: 4700036 in truffle.js file for ropsten network。它可能会起作用。

于 2017-12-13T13:48:25.023 回答