Blockchain Can';t通过块菌将智能合约部署到Rinkeby或Ropsten上

Blockchain Can';t通过块菌将智能合约部署到Rinkeby或Ropsten上,blockchain,ethereum,truffle,ether,openzeppelyn,Blockchain,Ethereum,Truffle,Ether,Openzeppelyn,我一直在尝试设置基于以太坊的ICO fallowing演示,但每次尝试将contract部署到Ropsten或Rinkeby ir时,都会出现以下错误: Running migration: 2_deploy_contracts.js Deploying SuperHeroTokenThreeCrowdsale... ... 0x9d0da17f00192993720639abceecc2b33c5fbb9a29dd43fa6e1abd0ce6aecc5d Error encounter

我一直在尝试设置基于以太坊的ICO fallowing演示,但每次尝试将contract部署到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)
我还得说我的林克比账户上有乙醚。 另一个注意事项——如果我部署到TestRpc,它工作得很好,我可以购买我的定制令牌,一切都很好。我试着调整汽油量,但没什么变化


你知道哪里会有问题吗?

合同可能太大,无法满足天然气的限制。在genesis.json中,尝试将gasLimit设置为非常高的值,比如0x6000000000000。这样,您就可以在truffle.js中将您的gas增加到6000000。这应该足以部署您的合同。

我还面临同样的问题,即ropsten network的truffle.js文件中的set gas:4700036。这可能有用。

我也面临同样的问题,下面是我为解决此错误所做的工作

首先要记住的是,部署使用齐柏林飞艇坚固性的智能合约,在您接下来的教程中,它使用了大量的气体价值。我能够在testrpc上部署契约,但无法在testnet(rinkeby和ropsten)上部署。当我监视testrpc控制台时,合同使用了5200000量的气体。其中,ropsten上的块限制为()为4700000。因此,我的合同没有部署到那里,它给出了相同的错误。如果我增加truffle.js文件中的气体量,它会给我错误,因为“超出了块气体限制”

因此,我选择使用truffle.js文件中的以下配置在Rinkeby网络上部署契约。请确保使用npm安装安装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
    }
  }
};

我希望它能帮助你解决你的问题。如果有任何问题,请告诉我。

代码中似乎有一些错误。这个信息完全是误导性的。无需更改truffle.js中的气体值

更改2_deploy_contracts.js中的
startTime
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)
};
const-icomycin=artifacts.require(“/mycincrowdsale.sol”);
常数持续时间={
秒:函数(val){return val},
分钟:函数(val){return val*this.seconds(60)},
小时:函数(val){return val*this.minutes(60)},
天:函数(val){return val*this.hours(24)},
周:函数(val){return val*this.days(7)},
年份:函数(val){return val*this.days(365)}
};
module.exports=功能(部署人员、网络、帐户){
const startTime=web3.eth.getBlock('latest')。时间戳+持续时间。分钟(1);
常量结束时间=开始时间+持续时间。分钟(30);
const rate=new web3.BigNumber(1000);
const wallet='>';
部署(IComycin、开始时间、结束时间、速率、钱包)
};

可能是geth未完全同步或远程端口未打开。我使用以下命令启动geth:
geth--rinkeby--rpc--rpcapi eth,net,web3,personal
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)
};